javascript - npm 参数导致 "Insufficient number of arguments or no entry found"

标签 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.

package.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 bool 值设置为 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 不支持标志,应该使用环境变量。这为我指明了正确的方向:Environment variables

我像这样更改了 package.json 和 webpack.config.js 文件:

package.json

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

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

webpack.config.js

There is one change that you will have to make to your webpack config. Typically, module.exports points to the configuration object. To use the env variable, you must convert module.exports to a function.

module.exports = env => {
    const no_dist = (env && env.dist === "false");

return {
    //webpack configuration
}

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

关于javascript - npm 参数导致 "Insufficient number of arguments or no entry found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50740947/

相关文章:

javascript - 从 React 中的 ref 回调读取 getBoundingClientRect 值

node.js - NPM Request - 如何返回请求的主体?

node.js - Mocha 集成 "RangeError: Maximum call stack size exceeded"

android - ionic 项目中的 www 文件夹为空

javascript - 如何阅读具有 node_modules 平面依赖项的 npm 项目的源代码?

javascript - Backbone.js - 使用 jquery mobile 渲染集合,无需样式化

javascript - 自动点击按钮

javascript - express 无法从 url 获取查询参数

reactjs - 我无法导入我发布的 typescript 库,错误为 : "Module not found: Can' t resolve 'tqt' in . ..”

javascript - 如何将 HTML 输入类型属性从 'password' 更改为'文本'?