npm(Node Package Manager)是 JavaScript 生态系统中的包管理工具,用于安装、管理和共享项目依赖。安装node时npm会自动安装,npm也可以单独安装。
package.json
在使用npm时,package.json文件是非常重要的,因为它包含了关于项目的必要信息,比如名称、版本、依赖项等。在初始化新项目时,通常会使用npm init命令生成一个空的package.json文件。 如果要运行npm命令,不一定非要有package.json文件存在。运行npm install或npm uninstall命令来安装或卸载依赖项。如果没有package.json文件,就需要明确指定要安装哪个版本的依赖项。如果有package.json文件,则npm将自动解析该文件中的依赖项并安装适当的版本。 另外,有些命令确实需要package.json文件才能正常工作。例如,npm run命令会读取package.json文件中的scripts字段来确定要执行哪些脚本。 总之,package.json文件在npm中扮演了很重要的角色,通常推荐在项目中始终使用package.json文件以保持一致性和组织性。
devDependencies用于指定项目在开发环境下所需的依赖包,这些依赖包通常不会在生产环境中使用,例如测试工具、构建工具等。这些依赖项只在开发环境中安装,不会在生产环境中安装。
dependencies则用于指定项目在生产环境中所需的依赖包,这些依赖包是项目正常运行所必需的,例如前端框架、后端框架等。这些依赖项会在开发环境和生产环境中都安装。
版本号
在npm(Node Package Manager)中,项目常常需要依赖许多外部组件,而这些组件通常都是开源的。使用开源组件时,需要注意其版本号,因为不同的版本号可能造成功能上的很大差别。
在npm中,版本号的规范通常是主版本号.次版本号.补丁版本号。其中,主版本号只有在程序发生重大变化时才会增加,例如新增重要功能、大量API或技术架构的重大变化;次版本号只有在程序发生一些较小的变化时才会增加;而补丁版本号则是在修复bug或者进行微小改进的时候才会增加。 此外,在指定依赖包版本号时,可以使用一些特殊的符号来表示不同级别的版本匹配规则。以下是常见的几个符号及其含义:
^
:表示“最近的小版本”,会匹配最新发布的次要版本和补丁版本,但不会改变主版本号。例如,^1.2.3
会匹配所有版本号大于等于1.2.3
且小于2.0.0
的版本,例如1.2.4
、1.3.5
等。~
:表示“最新的修补版本”,只匹配最新的补丁版本,但不会改变主版本号和次要版本号。例如,~1.2.3
会匹配所有版本号大于等于1.2.3
且小于1.3.0
的版本,例如1.2.4
、1.2.5
等。>
:表示“大于某个版本”,会匹配所有版本号大于指定版本号的版本。例如,>1.2.3
会匹配所有版本号大于1.2.3
的版本,例如1.3.0
、2.0.0
等。<
:表示“小于某个版本”,会匹配所有版本号小于指定版本号的版本。例如,<1.2.3
会匹配所有版本号小于1.2.3
的版本,例如1.1.0
、1.0.0
等。
注意:如果使用npm下载一个包但是下载失败了,如果你没有使用这些选项,`package.json` 文件不会有任何变化,如果你使用了 `--save` 或 `--save-dev` 选项,即使安装失败,`package.json` 文件中仍会包含相应的包名。PNPM在处理包安装失败时,旨在保持项目的状态一致性,不会在 `package.json` 文件中留下未安装成功的包名
安装包路径
npm 包的默认安装位置依赖于全局安装(-g)还是本地安装的情况。
全局安装(-g): 包将被安装在Node.js的全局目录下,通常是在你的操作系统中的某个路径下,如 /usr/local/lib 或 C:\Users\[用户名]\AppData\Roaming\npm。
本地安装:包将被安装在你当前项目的 node_modules 文件夹内。
npm config get prefix
这个命令可以查看npm的全局安装路径,这将返回npm的全局安装前缀。
npm root -g
这个命令可以命令查看实际的全局包安装目录。
npm root
这个命令可以命令查看实际的本地安装的包的目录。对于本地安装,包会被安装在你项目目录下的 node_modules 文件夹内。
如果你想改变全局安装的默认位置:
npm config set prefix xxx
XXX替换为自定义的路径,如:"D:\Program Files\nodejs\node_global"
如果你想改变本地安装的默认位置:
项目的 .npmrc 文件中设置 package-lock=false 并创建或修改 node_modules 文件夹的符号链接。
例如,如果你想将本地依赖安装在项目根目录下的 vendor 文件夹,你可以在项目根目录创建一个 .npmrc 文件,并添加以下内容:
prefix=vendor
package-lock=false
然后,你可以运行 npm install,这样包就会被安装到 vendor 文件夹中。
npm缓存
npm配置的缓存机制用于保存已下载的包,以便在以后的安装中重复使用,从而提高安装效率。默认情况下,npm缓存位于用户主目录下的.npm目录中。
npm config get cache
这个命令可以命令查看缓存目录。
npm config set cache xxx
这个命令,开发者可以指定一个自定义的缓存路径,将缓存存储在指定的目录中,比如:npm config set cache "D:\Program Files\nodejs\node_cache"。这个命令允许用户修改npm的缓存目录,以便更好地管理下载的包和优化磁盘空间的使用。
注意:确保指定的路径存在且具有读写权限。它不会移动已经存在的缓存数据。如果你想要移动已有的缓存数据,你需要手动操作。
npm cache clean --force
清除整个npm缓存目录,包括所有已下载的包。这在进行大规模清理或解决特定问题时非常有用
npm常用命令
npm install xxx 或 i
npm i xxx
不是全局安装,而是局部安装,他默认添加了参数 --save-dev。局部安装将包安装在当前项目的node_modules目录下,只在该项目内部生效,不会影响其他项目。这些模块将被添加到项目的 devDependencies
中,以便在生产和开发环境中使用。这样可以使每个项目各自独立地管理自己的依赖项,避免全局命名空间的冲突。
npm i xxx -g全局安装,这意味着可以在任何项目中直接使用该模块,而无需再次安装。它不会将模块添加到当前项目的 dependencies 或 devDependencies 中,也不会在项目的 node_modules 文件夹中保存该模块。
npm i xxx --save-dev
安装的插件,会被写入到devDependencies
对象里面去
npm i xxx --save
安装的插件,会被写入到dependencies
对象里面去
npm uninstall xxx 或 rm
卸载指定的模块
npm list
或 ls
列出当前项目的依赖列表
npm outdated
检查哪些依赖已经过时
npm run-script
或 run
执行 package.json 中定义的脚本
npm run 经历了那些步骤
npm run
命令实际上是在创建一个新的 Shell,并且在这个 Shell 中执行指定的脚本。这个 Shell 还会将当前项目的可执行依赖目录(通常是 node_modules/.bin
)添加到环境变量 PATH
中,这样你就可以在脚本中直接使用项目中安装的任何本地可执行文件而无需指定完整的路径。
1.解析命令:
当你在终端中输入 `npm run xxx` 时,npm(Node Package Manager)首先会解析这个命令。2.查找 package.json 文件:
npm 然后会在当前目录下查找名为 `package.json` 的文件。这个文件通常包含了项目的元数据、依赖项和脚本定义等信息。3.找到 scripts 对象:
在打开的 `package.json` 文件中,npm 查找 "scripts" 对象。这个对象包含了以键值对形式定义的各种脚本命令。4.匹配指定的脚本:
根据你提供的 `xxx` 参数,npm 查找在 "scripts" 对象中与之对应的键。例如,如果你运行的是 `npm run build`,它将查找 "build" 键。5.执行脚本:
找到相应的脚本定义后,npm 使用操作系统默认的 shell(如 Bash 或 PowerShell)来执行指定的命令。如果脚本定义是一个简单的命令,比如 `"build": "webpack"`,那么它就会直接执行 `webpack` 命令。
6.设置环境变量:
在执行脚本之前,npm 还会为脚本命令设置一些环境变量。这些环境变量包括但不限于 `NODE_ENV`,它可以用来指示当前的运行环境(例如开发或生产),以及其他可能由特定脚本或插件使用的自定义环境变量。7.显示输出:
脚本执行过程中产生的任何标准输出(stdout)和错误输出(stderr)都会被显示在终端上。8.处理退出状态码:
脚本执行完成后,npm 会检查其退出状态码。如果状态码是非零值,这通常表示出现了错误。在这种情况下,npm 将报告一个错误并终止操作。
npm scripts 使用指南 - 阮一峰的网络日志 (ruanyifeng.com)
npm可以连接私有云
可以通过配置npm注册表来连接私有云,以便让npm可以从私有云中获取包。以下是使用npm连接私有云的基本步骤:
1. 在npm注册表中创建一个帐户并登录。这个注册表可以是您自己的私人注册表,也可以是第三方服务提供商的注册表。
2. 设置npm的registry URL指向您的私有云地址。您可以通过使用npm命令行工具或修改npm配置文件(默认为`.npmrc`)来完成这个操作。例如:
npm config set registry https://your-private-cloud-url.com/
3. 在项目中引用私有云中的包。在 package.json 文件中列出所需的私有包,如下所示:
{
"dependencies": {
"my-private-package": "https://your-private-cloud-url.com/package/my-private-package#version"
}
}
4. 运行`npm install`命令来安装所需的私有包。需要注意的是,私有云可能需要特定的认证机制,如用户名和密码、OAuth2、JWT等。
参看文章
https://www.cnblogs.com/chaoyueqi/p/11232844.html
npm run 命令解析与node_modules .bin下的文件解析 - 舟舟舟 - 博客园 (cnblogs.com)