1. npm run 执行原理
npm run 命令的原理是执行 package.json 文件中定义的脚本。当你在命令行中运行 npm run 时,npm 会查找 package.json 文件中的 scripts 字段,然后执行对应的脚本命令。
2. 示例
2.1 以 dev:weapp 为例
- 运行 npm run dev:weapp 命令;
- npm 会查找 package.json 文件中的 scripts 的 dev:weapp;
- 由于配置的命令是 "dev:weapp": "npm run build:weapp -- --watch";
- 因此执行 npm run build:weapp -- --watch 命令;
- npm 会查找 package.json 文件中的 scripts 的 build:weapp;
- 由于配置的命令是 "build:weapp": "taro build --type weapp";
- 因此执行 taro build --type weapp 命令;
- 最后使用 taro 进行打包。
2.2 查看命令执行流程
3. taro 脚本查找规则
- 从当前项目的 node_modules/.bin 去查找可执行命令 taro;
- 从全局的 node_modules 去找可执行命令 taro;
- 从环境变量中查找;
- 上边三步都没找到,就进行报错。
3.1 当前 .bin 的 taro
3.2 全局 taro
3.3 环境变量
3.4 报错
4. npm 特殊脚本
在 npm 脚本中,pre 和 post 脚本是特殊的脚本,它们会在主脚本执行之前或之后自动执行。
如果你有一个 build 脚本,你可以定义一个 prebuild 脚本,它会在 build 脚本执行之前运行。
4.1 创建脚本生命周期
由于在 npm 中,pre 和 post 是特殊的前缀,用于定义在某个脚本执行之前或之后自动运行的脚本。这些前缀可以与任何自定义脚本结合使用,以创建一个脚本执行的生命周期。
4.2 测试 pre
4.3 命令
"prebuild:weapp:test": "node ./config/node_npm.js --env=test",
"build:weapp:test": "taro build --type weapp",
"dev:weapp:test": "npm run build:weapp:test -- --watch",
4.4 说明
- 执行 dev:weapp:test 命令;
- 执行 build:weapp:test 主命令前先执行 prebuild:weapp:test;
- 再执行 build:weapp:test 命令。
5. 创建脚本生命周期总结
创建脚本生命周期后,我们就可以在执行打包命令前,执行我们自己开发的脚本,然后再执行打包。比如上边示例,就是我通过脚本命令传递参数,来决定当前项目运行的测试接口环境还是正式接口环境。通过命令简化每次切换接口环境需要人工手动改写。
6. 参数的传递与获取
上边示例中的 --watch 和 --env=test 都是我们通过命令传递给脚本的参数,在我们写的脚本中,可以获取对应的参数来决定脚本的一些执行逻辑。
6.1 获取参数
const args = process.argv.slice(2);
const env = args.find(arg => arg.startsWith('--env='));
6.2 执行结果
7. 总结
- npm run 的执行原理,查找 package.json 文件中的 scripts 字段,然后执行对应的脚本命令。
- 脚本执行的查找规则:当前 .bin > 全局 node_modules > 环境变量 > 报错。
- 使用特殊的脚本前缀,创建脚本执行生命周期,可以在主命令执行之前或者之后完成我们自己的脚本。
- 通过脚本命令传递参数,使用参数来决定脚本的执行逻辑,参数获取。