生产环境与开发环境
开发环境:在项目开发时,用来测试的本地地址及环境,一般是指开发人员的电脑
生产环境:项目正式运行的环境,一般是指正式的服务器电脑
生产依赖与开发依赖
对于生产和开发环境,可以安装各自的依赖,在安装依赖时,通过不同的语句进行区分:
npm i -S 或 npm i --save,用于生产依赖安装,安装后,包信息保存在package.json中的dependencies属性中
npm i -D 或 npm i --save-dev,用于开发依赖安装,安装后,包信息保存在package.json中的devDependencies属性中
要注意,其中,生产依赖可以用于 开发环境和生产环境,而开发依赖只用于开发环境。
**为什么在开发和生产阶段会有不一样的包需求呢?**思考这样一种场景,由于现在前端项目都是由脚手架生成的,对于部分无法解析成css的代码,可能需要包来进行转换,而对于生产环境,由于生产环境的代码是已经打包好的css代码,因此生产环境并不需要这个转换包。所以可以把这个包安装在开发依赖中。
不管是生产依赖还是开发依赖,都在node_modules文件夹下。
有时候,会产生这种现象,本地没有安装多少包,但是node_modules文件夹下有一长串文件,这是由于,对于一个包来说,这个包可能引用了其他许许多多的依赖(可以查看node_modules文件夹对应文件的package.json中的配置),因此安装这个包,还会安装包对应的一系列依赖。
**包应该安装在生产依赖还是开发依赖中呢?**可以查看包的开发文档,文档中可能会有提及。如果文档中没有,可以根据包的用途酌情处理。
在安装包时,-S是默认选项,也就是说,如果安装时没有指定环境,则默认安装的是生产依赖,在开发环境和生产环境中都可以使用。
npm安装包的所有依赖
使用npm i,可以安装当前文件路径下package.json和package-lock.json中配置的所有依赖。
由于node_modules文件夹一般很大,大多数情况下,node_modules不会被存入仓库,所以本地下载代码之后,通常需要本地再安装一下项目所需的所有依赖。
npm全局安装
不管是npm install -S 还是npm install -D,都是安装在本地文件夹下,也就是说,只有当前项目能使用安装的包。
如果需要进行全局安装,可以通过-g指令来进行。
npm install -g
安装完成后,可以在任何目录下运行安装的包。
通过npm root -g可以查看全局包安装的位置。
全局安装通常适用于工具类的包。
比如监测代码改变自动重启服务器的包nodemon,就很适合全局安装。

全局安装与局部安装
对于局部安装的包,需要通过require引入代码中,然后进行调用,而对于全局安装的包,则需要在命令行中敲代码主动调用包。
全局安装的包一般安装在C盘某个位置,而局部安装包安装在当前本地项目的node_modules文件夹下。
windows执行策略
windows可能会对全局安装的脚本进行限制,也就是说,可能全局安装包会在windows环境下报错。
如果想消除这种报错,需要修改windows执行策略。
步骤:以管理员身份打开windows powershell命令行。

输入命令set-ExecutionPolicy remoteSigned,然后输入A,即可解决这个问题。

另一种解决方案是更改vscode下的命令行类型:在cmd中运行。
步骤:在vscode中,终端的操作栏,点击+旁边的按钮,然后选择select default profile(选择默认配置)

点击之后,会弹出一个选择框,选择第一个选项:

然后再点击+,新建的就是cmd终端:

npm安装指定版本包
使用npm i 包名@版本号,可以通过该命令安装指定版本的包
npm删除包
使用npm r 包名 或者npm remove 包名,或者npm r -g 包名(删除全局包),或者npm uninstall,即可删除包
npm配置命令别名
有时候,可能需要在命令行敲一个比较长,或者不便于阅读的命令,此时可以给该命令设置别名,来提高开发效率。
别名配置方法:
在package.json文件夹下的scripts对象中配置,对象中的key是命令的别名,value是该别名对应的命令:

javascript
...
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"server": "node a.js"
},
...
当我们想调用别名时,使用语法npm run 别名 ,即可调用别名对应的语句:
在本例中npm run server即相当于node a.js,即运行本地项目:

在敲npm run时,会去package.json中的scripts下去找同名指令,如果找到了,则会运行对应的指令,没有找到则会报错。
有时候,也许会觉得使用npm run 别名时,敲的命令长度并没有比对应的命令短多少,但是为什么要使用别名呢?一个是在开发中,别名一般是约定俗成的,一个是随着项目的开发,别名对应的代码可能会变长。总之,使用别名的方法是利于开发的。
对于别名,有一个特殊的别名start,对于start来说,可以使用npm start调用对应的命令,而不需要加run。
npm run有自动向上寻找的特性,与require类似,npm run会寻找当前目录的package.json,如果当前文件下没有package.json,则会去当前文件的上级目录去寻找package.json。
自动向上寻找特性其实是方便开发的,因为在实际开发中,可能文件夹套了很多层级,对于一个包或者是package.json来说,不可能在每个文件夹下都创建一个package.json,因此向上寻找特性是很必要的。
当拿到一个新项目时,一般可以先查看package.json的scripts配置,去获取一些项目运行的信息。
环境变量path
环境变量path不是node.js独有的,是计算机的一个通识知识,但是在开发过程中,可能会涉及这个问题,所以这里简要介绍一下。
对于一个软件,虽然本地安装了,但是在命令行中直接敲对应的代码,命令行会提示"XX"不是内部或外部命令,也不是可运行的程序或批处理文件。
但是,如果进入该软件的工作目录,然后再敲代码,通常代码则会生效。
为什么会产生这种现象呢?这是由于在没有配置的情况下,命令只对当前文件夹生效,如果直接在当前文件夹下敲击代码,可能对应的代码工作目录是另一个文件夹,就会引发报错。如果需要在所有目录下敲击代码,都想使代码生效,就需要把该工作路径添加到环境变量里。这样下次再敲相同的代码时,电脑会自动去环境变量记录的目录中查看对应的命令能否运行,这样该命令就可以在任何路径下运行了。
如何配置环境变量?在高级系统设置页面:

点击环境变量进行配置:

在该页面中,上面是当前用户的环境变量,下面是系统的环境变量,对于本地开发的环境变量,一般放到用户环境变量就可以了。

把对应的路径添加到Path变量里:在该页面双击Path这一行,在弹出的页面中选择新建,然后输入对应的工作路径就可以了。要注意,修改环境变量之后,需要新打开命令行窗口,才能生效,在旧的命令行窗口中,新配置的环境变量无法生效。
在配置之后,在命令行窗口中敲代码时,首先会在当前路径下执行,如果没有找到对应的执行对象,则会进入环境变量Path配置的列表中,在列表中依次寻找所有路径,如果找到了则进行执行,没有找到则会进行报错。