npm 工作原理

140 阅读2分钟

npm inatsll的过程

  • 先检查node_modules 目录下是否存在 如果不存在(会检查电脑上/usr/local/bin下的压缩包) 则继续下面操作
  • npm 向 registry查询模块压缩包的网址(npm提供的模块信息查询服务 registry.npmjs.org/packaename/version
  • 下载压缩包,存放到全局对应的/.npm目录下
  • 同时解压压缩到当前项目的node_modules目录下

npm install的几种方式的区别

npm install xxx # 安装模块项目目录下
npm install -g xxx # -g 的意思是将模块安装到全局,具体安装到磁盘哪个位置,要看 npm config prefix 的位置。
npm install --save xxx # --save 的意思是将模块安装到项目目录下,并在package文件的dependencies节点写入依赖。
npm install --save-dev xxx # --save-dev 的意思是将模块安装到项目目录下,并在package文件的devDependencies节点写入依赖。

npm install X -g

  • 安装模块到全局,不会在项目node_modules目录中保存模块包。
  • 不会将模块依赖写入devDependencies或dependencies 节点。
  • 运行 npm install 初始化项目时不会下载模块。

npm install X

  • 会把X包安装到node_modules目录中
  • 不会修改package.json
  • 删除项目node_modules文件夹之后运行npm install命令时,也不会自动安装X

npm install X --save

开发和生产环境都需要的 ,比如js框架,ui库,网络请求库,代码执行需要的依赖

  • 会把X包安装到node_modules目录中
  • 会在package.json的dependencies属性下添加X
  • 之后运行npm install命令时,会自动安装X到node_modules目录中
  • 之后运行npm install --production或者注明NODE_ENV变量值为production时,会自动安装到node_modules目录中,即是在线上环境运行时也将安装

npm install X –save-dev

只是开发环境需要:比如wenpack的相关的插件,打包编译阶段需要的依赖

  • 会把X包安装到node_modules目录中
  • 会在package.json的devDependencies属性下添加X
  • 之后运行npm install命令时,会自动安装X到node_modules目录中
  • 之后运行npm install –production或者注明NODE_ENV变量值为production时,不会自动安装X到node_modules目录中

小结

运行时需要用到的包使用––save,否则使用––save-dev。

npm run的过程

  • package.json文件里 script 配置对应命令XXX
  • npm run XXX 其实就是执行上面配置 命令创建一个脚本shell
  • 在脚本执行之前,会将环境变量添加在全局下,执行完毕后会删除对应的path
  • 以开发包 dev 举例子 ,执行config-dev.js
  • 配置文件里 从entry文件出发,从上到下加载依赖,然后执行脚本,最后打成一个包