npm 参数的结果是"Insufficient number of arguments or no entry found"



我尝试将自定义标志从 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:UsersusergitrootMyProjectsharepoint'
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.

包.json

...
"scripts": {
"dev": "webpack --mode development -- --no-dist",
"dev:dist": "webpack --mode development",
"build": "webpack --mode production"
},
...

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);

测试

  1. npm run dev:dist

这可以正常工作,它可以毫无问题地捆绑和分发。提供以下输出:

username user
process.argv.slice(2) [ '--mode', 'development' ]
no_dist false
  1. npm run dev:dist --user test

也可以工作并提供以下输出:

username test
process.argv.slice(2) [ '--mode', 'development' ]
no_dist false
  1. npm run dev

这里变得有趣,我尝试运行具有--no-dist标志的开发脚本。输出:

username user
process.argv.slice(2) [ '--mode', 'development', '--', '--no-dist' ]
no_dist true

如您所见,no_dist布尔值设置为 true,这是想要的行为。但是我收到以下错误:

Insufficient number of arguments or no entry found.
Alternatively, run 'webpack(-cli) --help' for usage info.
  1. >npm run dev --user test

与测试 3 的行为相同。参数被传递给 webpack.config.js但会导致相同的错误。

username test
process.argv.slice(2) [ '--mode', 'development', '--', '--no-dist' ]
no_dist true

我在这里错过了什么吗?

正如@squgeim提到的,webpack 不支持标志,应该使用环境变量。这为我指明了正确的方向: 环境变量

我更改了我的package.json和webpack.config.js文件,如下所示:

包.json

"scripts": {
"dev": "webpack --mode development --env.dist=false",
"dev:dist": "webpack --mode development",
"build": "webpack --mode production"
},

--env.dist=falsedist添加到环境变量中。

webpack.config.js

您必须对 webpack 配置进行一项更改。通常,模块导出指向配置对象。要使用 env 变量,必须将 module.exports 转换为函数。

module.exports = env => {
const no_dist = (env && env.dist === "false");
return {
//webpack configuration
}

这似乎是正确的方法。再次感谢@squgeim为我指出正确的方向!

我只是得到了同样的错误,我发现在我的情况下这是由于 ES6 语法错误。我在webpack.config.js中使用了module.export而不是module.exports

我认为 webpack 在其配置中不支持自定义 cli 标志。

惯用方法是使用环境变量将自定义参数传递给您的配置。

"dev:dist": "DIST=true webpack --mode development"

并像这样访问它:

if (process.env.DIST === 'true') {
}

相关内容

最新更新