npm系统操作(npm原理和使用)

示例使用环境为: nodejs 16.17.1 LTS npm概念

npm: 全称(Node Package Manager),是node的包管理工具。就是下载,管理第三方代码模块的工具。它随Node一起发布。其中心管理仓库是 npmjs.com.

查询npm版本

npm -v

npm系统操作(npm原理和使用)(1)

package.json

node是通过package.json文件,来指定下载的第三方库的名称和版本。

生成package.json

npm init

npm系统操作(npm原理和使用)(2)

npm系统操作(npm原理和使用)(3)

可以采用默认值,直接回车,生成jackage.json.

npm系统操作(npm原理和使用)(4)

自动生成的jackage.json文件

npm常用命令

安装模块最新版

不带参数的npm install会安装模块的最新版

npm install

npm系统操作(npm原理和使用)(5)

非全局方式安装模块

通过指定tag安装模块

npm install tag

指定版本号,如果版本号不存在,安装会失败

npm install version

npm系统操作(npm原理和使用)(6)

指定版本号的范围

npm install 范围表达式

npm系统操作(npm原理和使用)(7)

如果本机有多个项目公用模块,可以采取全局安装方式

npm install -g 模块名

npm系统操作(npm原理和使用)(8)

全局模式安装模块

查看全局模式模块的安装目录

npm config get prefix

npm系统操作(npm原理和使用)(9)

使用不带参数的 npm install命令会把安装模块的名称和版本号写入到package.json文件的depengencies字段。

版本号规则表达式如下:

npm系统操作(npm原理和使用)(10)

--save-dev 参数:

npm install --save-dev 参数:会把对应的模块信息写入devDependencies字段。

生成开发版本的依赖库。

npm install --save-dev

npm系统操作(npm原理和使用)(11)

用--save-dev参数安装模块

npm系统操作(npm原理和使用)(12)

生成devDependencies字段的package.json

正式上线的时候用 --production, 这样,这个命令会忽略devDependencies字段,只安装devDependcies字段下定义的模块。

npm install --production

node_modules - 非全局下载的模块的保存目录

执行npm install命令后,npm会根据package.json文件中描述的依赖安装对应的模块,并且生成node_modules目录,非全局安装的模块都会放在这个目录里面。

清除npm缓存

npm缓存文件一般会很大,占用好几个G的空间。

查看npm缓存目录

npm config get cache

清空npm缓存空间

npm cache clean -force

npm系统操作(npm原理和使用)(13)

清空npm缓存

package.json控制版本的缺点:

package.json可以控制一个模块的版本号,但是无法控制其依赖的版本。多次不同时间运行npm install会产生依赖模块版本不一致的情况。

那可以通过指定depengencies字段的具体版本来解决吗?不太理想,因为有的模块会因bug而升级,指定了版本,有可能由于原有的bug而导致构建失败。

package-lock.json

存储依赖模块的详细信息文件。

packeage-lock.json文件会在使用npm install时自动生成 ,其把模块的详细依赖信息写入了这个文件。

dependencies属性包含了node_module文件夹下的所有模块的版本号和下载地址。

我们在项目提交版本源码的时候,把package.json和package-lock.json文件都保存在源码库中提交是一个好的习惯。这样,再次构建的时候,会按照package-lock.json文件构建。

npm系统操作(npm原理和使用)(14)

带有依赖模块详细信息的package-lock,json

使用script字段构建npm项目

npm系统操作(npm原理和使用)(15)

npm run test

把你要运行的命令行,放在script字段中。然后可以在命令行中,运行你指定的关键字。

注意点:npm test的时候,会先从node_module中的.bin目录里面查找对应的可执行文件。

如果没找到,才去系统的环境变量里面找。这样做的好处是避免了,使用全局变量造成的版本冲突。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页