it-swarm.com.de

npm-Argument führt zu "Unzureichende Anzahl von Argumenten oder kein Eintrag gefunden"

Ich versuche, ein benutzerdefiniertes Flag aus dem npm-Skript an meine Webpack-Konfiguration zu übergeben. Dies führt jedoch zu folgendem Fehler. Die Protokolle

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

Dies funktioniert ohne Fehler, es wird gebündelt und ohne Probleme verteilt. Gibt die folgende Ausgabe aus:

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

Funktioniert auch und gibt folgende Ausgabe:

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

Hier wird es interessant, ich versuche das dev-Skript auszuführen, das ein --no-dist-Flag hat. Ausgabe:

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

Wie Sie sehen können, ist no_dist boolean auf true gesetzt, was das gewünschte Verhalten ist. Ich erhalte jedoch den folgenden Fehler:

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

Gleiches Verhalten wie Test 3. Die Argumente werden an die Datei webpack.config.js übergeben, führen jedoch zu demselben Fehler.

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

Fehlt mir hier etwas?

2
Perneel

Wie @squgeim erwähnt, unterstützt webpack keine Flags und Umgebungsvariablen sollten verwendet werden. Dies zeigte mir die richtige Richtung: Umgebungsvariablen

Ich habe meine package.json- und webpack.config.js-Datei folgendermaßen geändert:

package.json

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

--env.dist=false fügt den Umgebungsvariablen dist hinzu.

webpack.config.js

Es gibt eine Änderung, die Sie an Ihrer Webpack-Konfiguration vornehmen müssen. Normalerweise zeigt module.exports auf das Konfigurationsobjekt. Um die env-Variable zu verwenden, müssen Sie module.exports in eine Funktion konvertieren.

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

return {
    //webpack configuration
}

Dies scheint der richtige Weg zu sein. Nochmals vielen Dank @squgeim, mich in die richtige Richtung zu weisen!

5
Perneel

Ich glaube nicht, dass Webpack in seinen Konfigurationen benutzerdefinierte Cli-Flags unterstützt.

Der idiomatische Ansatz besteht darin, Umgebungsvariablen zu verwenden, um benutzerdefinierte Argumente an Ihre Konfigurationen zu übergeben.

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

Und greifen Sie wie folgt zu:

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