Skip to main content

npm 基础

知识点

几种依赖类型

  • dependencies 项目依赖,会成为线上生产环境中的代码组成部分

  • devDependencies 开发依赖,辅助开发的工具包,无须在生产环境使用

  • peerDependencies 同版本依赖

  • bundledDependencies 捆绑依赖

  • optionalDependencies 可选依赖,不建议使用,它大概率会增加项目的不确定性和复杂性。

dependencies 、devDependencies 依赖是否被打包,完全取决于项目里是否被引入了该模块。

peerDependencies 的使用场景:

  • 插件不能单独运行

  • 插件正确运行的前提是核心依赖库必须先下载安装

  • 我们不希望核心依赖库被重复下载

  • 插件 API 的设计必须要符合核心依赖库的插件编写规范

  • 在项目中,同一插件体系下,核心依赖库版本最好相同

脚本传入参数

"scripts":{
"serve": "vue-cli-service serve --mode=dev --mobile -config build/example.js"
}

体现到 process.env

[ '/usr/local/Cellar/node/12.14.1/bin/node',
'/Users/mac/Vue-projects/hao-cli/node_modules/.bin/vue-cli-service',
'serve',
'--mode=dev',
'--mobile',
'-config',
'build/example.js']
npm run serve --params  # 参数params将转化成process.env.npm_config_params = true
npm run serve --params=123 # 参数params将转化成process.env.npm_config_params = 123
npm run serve -params # 等同于--params参数

npm run serve -- --params # 将--params参数添加到process.env.argv数组中
npm run serve params # 将params参数添加到process.env.argv数组中
npm run serve -- params # 将params参数添加到process.env.argv数组中

执行顺序

  • 并行任务,使用 &
npm run a & npm run b
  • 串行任务,使用 &&
npm run a && npm run b

env 环境变量

如果env环境变量中存在以npm_config_为前缀的环境变量,则会被识别为npm的配置属性。npm 会从环境变量读到这个配置

export npm_config_package_lock=false # 修改的是内存中的变量,只对当前终端有效
  • 查看某个环境变量:echo $NODE_ENV
  • 删除某个环境变量:unset NODE_ENV

npmrc 文件

npmrc 文件优先级由高到低包括:

  • 工程内配置文件: /path/to/my/project/.npmrc
  • 用户级配置文件: ~/.npmrc
  • 全局配置文件: $PREFIX/etc/npmrc (即npm config get globalconfig 输出的路径)
  • npm内置配置文件:/path/to/npm/npmrc

常见命令

npm 文档 npm cli

常见命令

npm run env 列出所有环境变量

npm ci

CI 环境使用 npm ci 代替 npm install,一般会获得更加稳定、一致和迅速的安装体验。

  • npm ci 完全根据 package-lock.json 安装依赖,这可以保证整个开发团队都使用版本完全一致的依赖;
  • 如果 package-lock.json 和 package.json 冲突,那么 npm ci 会直接报错,并非更新 lockfiles
  • npm ci 永远不会改变 package.json 和 package-lock.json

自定义 npm init

const desc = prompt('请输入项目描述', '项目描述...')

module.exports = {
key: 'value',
name: prompt('name?', process.cwd().split('/').pop()),
version: prompt('version?', '0.0.1'),
description: desc,
main: 'index.js',
repository: prompt('github repository url', '', function (url) {
if (url) {
run('touch README.md');
run('git init');
run('git add README.md');
run('git commit -m "first commit"');
run(`git remote add origin ${url}`);
run('git push -u origin master');
}
return url;
})
}

执行 npm config set init-module ~\.npm-init.js