Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

npm argument results in "Insufficient number of arguments or no entry found"

I try to pass a custom flag from npm script to my webpack config but it results in following error. The logs

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

This works without errors, it gets bundled and distributed without problems. Gives the following output:

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

Also works and gives the following output:

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

Here it gets interesting, I try to run the dev script which has a --no-dist flag. Output:

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

As you can see, no_dist boolean is set to true, which is the wanted behaviour. But I get the following error:

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

Same behaviour as test 3. The arguments are passed to the webpack.config.js but result in the same error.

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

Am I missing something here?

like image 355
Perneel Avatar asked Jun 07 '18 12:06

Perneel


2 Answers

As @squgeim mentioned, webpack does not support flags and environment variables should be used. This pointed me in the right direction: Environment variables

I changed my package.json and webpack.config.js file like this:

package.json

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

--env.dist=false adds dist to the environment variables.

webpack.config.js

There is one change that you will have to make to your webpack config. Typically, module.exports points to the configuration object. To use the env variable, you must convert module.exports to a function.

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

return {
    //webpack configuration
}

This seems to be the correct way to do it. Thanks again @squgeim to point me in the right direction!

like image 159
Perneel Avatar answered Oct 17 '22 09:10

Perneel


I just got the same error yesturday,and i found out in my case it is due to the ES6 syntax error.I used module.export instead of module.exports in webpack.config.js.

like image 31
Anoman.M Avatar answered Oct 17 '22 07:10

Anoman.M