Аргумент npm приводит к «Недостаточное количество аргументов или запись не найдена» - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь передать пользовательский флаг из скрипта npm в конфигурацию моего веб-пакета, но это приводит к следующей ошибке.Журналы

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
npm run dev:dist --user test

Также работает и дает следующий вывод:

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

Здесь становится интересно, я пытаюсь запустить скрипт dev с флагом --no-dist.Вывод:

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

Как видите, no_dist boolean установлен в true, что является требуемым поведением.Но я получаю следующую ошибку:

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

То же поведение, что и в тесте 3. Аргументы передаются в webpack.config.js, но приводят к той же ошибке.

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

Я что-то здесь упускаю?

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Как уже упоминалось @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

Есть одно изменение, которое вам нужно будет внести в конфигурацию вашего веб-пакета.Как правило, module.exports указывает на объект конфигурации.Чтобы использовать переменную env, вы должны преобразовать module.exports в функцию.

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

return {
    //webpack configuration
}

Это, кажется, правильный способ сделать это.Еще раз спасибо @squgeim, чтобы указать мне правильное направление!

0 голосов
/ 24 марта 2019

Я получил такую ​​же ошибку вчера, и я обнаружил, что в моем случае это связано с синтаксической ошибкой ES6. Я использовал module.export вместо module.exports в webpack.config.js .

0 голосов
/ 07 июня 2018

Я не думаю, что webpack поддерживает настраиваемые флаги cli в своих конфигурациях.

Идиоматический подход заключается в использовании переменных среды для передачи настраиваемых аргументов в ваши конфигурации.

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

и доступэто как:

if (process.env.DIST === 'true') {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...