在 NPM 脚本中处理命令行参数
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
自定义参数
假设你有一个 NPM 脚本来检查你的应用程序代码。类似这样:
"scripts": {
"lint": "eslint './src/**/*.{js,ts,tsx}'"
}
然后你决定添加一个静默模式下的 `lint --fix` 命令,因为有时你希望代码检查工具悄悄地修复错误。然后你又添加了另一个脚本:
"scripts": {
"lint": "eslint './src/**/*.{js,ts,tsx}'",
"lint:fix": "eslint './src/**/*.{js,ts,tsx}' --quiet --fix"
}
你的脚本lint:fix基本上lint就是添加了两个新参数。因此,你可以重写脚本,直接将参数传递给lint命令,而无需重复编写:
"scripts": {
"lint": "eslint './src/**/*.{js,ts,tsx}'",
"lint:fix": "npm run lint -- --quiet --fix"
}
这种方法更简洁,也更易于扩展。如果您更改lint命令,所有变体都会继承这些更改。此外,它也更容易阅读和理解。
这种--写法告诉你的脚本将参数传递给 NPM 当前调用的命令。NPM 文档中写道:“NPM 会将 `<` 之后的所有参数--直接传递给你的脚本。” 此功能在 NPM 2.0.0 及更高版本中可用 |请参阅文档。你可以将参数传递给任何命令。
命名参数
根据 NPM 文档:“任何以 npm_config_ 开头的环境变量都将被解释为配置参数 |请参阅文档。”也就是说,您可以使用该npm_config_变量将命名参数传递给 NPM 脚本的执行。
假设你有一个脚本,serve可以根据你的 NODE_ENV 以 4 种模式运行你的应用程序:development、、staging和。那么,你可以有以下 NPM 脚本:testproduction
"scripts": {
"serve": "nodemon index.js",
"serve:dev": "NODE_ENV=development npm run serve",
"serve:staging": "NODE_ENV=staging npm run serve",
"serve:test": "NODE_ENV=test npm run serve",
"serve:prod": "NODE_ENV=production npm run serve"
}
太好了,任务完成:你可以根据你的设置来运行应用程序stage,这也非常有用。但是我们可以重构这段代码,使其只使用一个脚本,并通过变量将我们的阶段作为参数传递,npm_config_就像这样:
"scripts": {
"serve": "NODE_ENV=$npm_config_stage nodemon index.js"
}
现在,我们可以stage像这样传递参数 ($npm_config_stage) 来在调用脚本时修改 NODE_ENV:
npm run serve --stage=development
你可以将任何值传递给stage参数,例如npm run serve stage=whatever。
你也可以选择另一个名称,例如myvar。这样,你就可以调用npm run serve --myvar=whatever,而你的npm_config_变量就是$npm_config_myvar。
结论
使用自定义参数和命名变量可以让你的 NPM 脚本更小巧、更易于理解和维护。就这些啦 :)
封面图片来自 Luca Bravo @ Unsplash
文章来源:https://dev.to/felipperegazio/handling-command-line-arguments-in-npm-scripts-2ean