Per*_*eel 4 javascript node.js npm webpack
我尝试将自定义标志从npm脚本传递到我的webpack配置,但它会导致以下错误.日志
Insufficient number of arguments or no entry found.
Alternatively, run 'webpack(-cli) --help' for usage info.
ERROR in Entry module not found: Error: Can't resolve '--no-dist' in 'C:\Users\user\gitroot\MyProject\sharepoint'
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! my-project@4.0.0 dev: `webpack --mode development -- --no-dist`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the my-project@4.0.0 dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
Run Code Online (Sandbox Code Playgroud)
的package.json
...
"scripts": {
"dev": "webpack --mode development -- --no-dist",
"dev:dist": "webpack --mode development",
"build": "webpack --mode production"
},
...
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
let username = process.env.USERNAME;
if (process.env.npm_config_user !== undefined && process.env.npm_config_user !== "") {
username = process.env.npm_config_user;
}
console.log("username", username);
console.log("process.argv.slice(2)", process.argv.slice(2));
const no_dist = process.argv.slice(2).indexOf("--no-dist") > -1;
console.log("no_dist", no_dist);
Run Code Online (Sandbox Code Playgroud)
测试
npm run dev:dist这没有错误,捆绑和分发没有问题.给出以下输出:
username user
process.argv.slice(2) [ '--mode', 'development' ]
no_dist false
Run Code Online (Sandbox Code Playgroud)
npm run dev:dist --user test也可以工作并提供以下输出:
username test
process.argv.slice(2) [ '--mode', 'development' ]
no_dist false
Run Code Online (Sandbox Code Playgroud)
npm run dev这里有趣,我尝试运行带有--no-dist标志的开发脚本.输出:
username user
process.argv.slice(2) [ '--mode', 'development', '--', '--no-dist' ]
no_dist true
Run Code Online (Sandbox Code Playgroud)
如您所见,no_distboolean设置为true,这是想要的行为.但是我收到以下错误:
Insufficient number of arguments or no entry found.
Alternatively, run 'webpack(-cli) --help' for usage info.
Run Code Online (Sandbox Code Playgroud)
npm run dev --user test与测试3相同的行为.参数传递给webpack.config.js但导致相同的错误.
username test
process.argv.slice(2) [ '--mode', 'development', '--', '--no-dist' ]
no_dist true
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
正如@squgeim所提到的,webpack不支持标志,应该使用环境变量.这使我指出了正确的方向:环境变量
我改变了我的package.json和webpack.config.js文件,如下所示:
的package.json
"scripts": {
"dev": "webpack --mode development --env.dist=false",
"dev:dist": "webpack --mode development",
"build": "webpack --mode production"
},
Run Code Online (Sandbox Code Playgroud)
--env.dist=false添加dist到环境变量.
webpack.config.js
您必须对webpack配置进行一项更改.通常,module.exports指向配置对象.要使用env变量,必须将module.exports转换为函数.
module.exports = env => {
const no_dist = (env && env.dist === "false");
return {
//webpack configuration
}
Run Code Online (Sandbox Code Playgroud)
这似乎是正确的方法.再次感谢@squgeim指出我正确的方向!
| 归档时间: |
|
| 查看次数: |
17893 次 |
| 最近记录: |