npm参数导致"参数数量不足或找不到条目"

时间:2018-06-07 12:13:38

标签: 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
  2. 这没有错误,捆绑和分发没有问题。给出以下输出:

    username user
    process.argv.slice(2) [ '--mode', 'development' ]
    no_dist false
    
    1. npm run dev:dist --user test
    2. 同样有效并提供以下输出:

      username test
      process.argv.slice(2) [ '--mode', 'development' ]
      no_dist false
      
      1. npm run dev
      2. 这里有趣,我尝试运行带有--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
        2. 与测试3的行为相同。参数传递给webpack.config.js但导致相同的错误。

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

          我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:5)

正如@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=falsedist添加到环境变量中。

<强> webpack.config.js

  

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

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

return {
    //webpack configuration
}

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

答案 1 :(得分:2)

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

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

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

并访问它:

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

答案 2 :(得分:1)

昨天我遇到了同样的错误,我发现这是由于ES6语法错误造成的。我在 webpack.config.js中使用了module.export而不是module.exports