web-dev-qa-db-ja.com

npm引数は「引数の数が不十分であるか、エントリが見つからない」という結果になります。

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! [email protected] dev: `webpack --mode development -- --no-dist`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the [email protected] 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ブール値は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

ここで何か不足していますか?

4
Perneel

@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"
},

--env.dist=falseは、環境変数にdistを追加します。

webpack.config.js

Webpack構成に加えなければならない変更が1つあります。通常、module.exportsは構成オブジェクトを指します。 env変数を使用するには、module.exportsを関数に変換する必要があります。

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

return {
    //webpack configuration
}

これは正しい方法のようです。正しい方向に向けてくれてありがとう@squgeim!

5
Perneel

Webpackがその構成でカスタムcliフラグをサポートしているとは思いません。

慣用的なアプローチは、環境変数を使用してカスタム引数を構成に渡すことです。

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

そしてそれにアクセスする:

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