web-dev-qa-db-fra.com

l'argument npm donne "Nombre d'arguments insuffisant ou aucune entrée trouvée"

J'essaie de passer un indicateur personnalisé du script npm à la configuration de mon Webpack, mais l'erreur suivante est générée. Les journaux

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

Tests

  1. npm run dev:dist

Cela fonctionne sans erreur, il est groupé et distribué sans problème. Donne le résultat suivant:

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

Fonctionne également et donne la sortie suivante:

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

Ici, ça devient intéressant, j'essaye de lancer le script dev qui a un drapeau --no-dist. Sortie:

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

Comme vous pouvez le constater, no_dist boolean est défini sur true, ce qui correspond au comportement souhaité. Mais j'obtiens l'erreur suivante:

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

Même comportement que test 3. Les arguments sont transmis à webpack.config.js mais entraînent la même erreur.

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

Est-ce que j'ai râté quelque chose?

2
Perneel

Comme @squgeim l'a mentionné, Webpack ne prend pas en charge les indicateurs et les variables d'environnement doivent être utilisées. Cela m'a orienté dans la bonne direction: Variables d'environnement

J'ai changé mon package.json et mon fichier webpack.config.js comme ceci:

package.json

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

--env.dist=false ajoute dist aux variables d'environnement.

webpack.config.js

Vous devrez apporter un changement à votre configuration Webpack. En règle générale, module.exports pointe vers l'objet de configuration. Pour utiliser la variable env, vous devez convertir module.exports en une fonction.

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

return {
    //webpack configuration
}

Cela semble être la bonne façon de le faire. Merci encore à @squgeim de m'indiquer la bonne direction!

5
Perneel

Je ne pense pas que Webpack prenne en charge les drapeaux CLI personnalisés dans ses configurations.

L'approche idiomatique consiste à utiliser des variables d'environnement pour transmettre des arguments personnalisés à vos configurations.

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

Et y accéder comme:

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