Protobuf.js: Installation errors running CLI

Created on 6 Mar 2020  路  12Comments  路  Source: protobufjs/protobuf.js

protobuf.js version: 6.8.8

Expected: Protobufjs runs and installs dependencies
Actual: Protobufjs fails to install dependencies

installing jsdoc@^3.5.5
installing uglify-js@^3.3.25
installing espree@^3.5.4
child_process.js:669
    throw err;
    ^
Error: Command failed: npm --silent install jsdoc@^3.5.5 uglify-js@^3.3.25 espree@^3.5.4
    at checkExecSyncError (child_process.js:630:11)
    at Object.execSync (child_process.js:666:15)
    at modInstall (D:\Project\node_modules\protobufjs\cli\util.js:129:19)
    at Object.exports.setup (D:\Project\node_modules\protobufjs\cli\util.js:156:5)
    at Object.<anonymous> (D:\Project\node_modules\protobufjs\cli\pbjs.js:7:6)
    at Module._compile (internal/modules/cjs/loader.js:1157:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1177:10)
    at Module.load (internal/modules/cjs/loader.js:1001:32)
    at Function.Module._load (internal/modules/cjs/loader.js:900:14)
    at Module.require (internal/modules/cjs/loader.js:1043:19) {

Any ideas for how to mitigate this?

Most helpful comment

This is so annoying. Installing packages dynamically!? it should be avoided.

All 12 comments

Note: We have multiple machines failing with this error

The CLI and the browser runtime source code are in one package. Most people are only using protobuf.js for their runtime dep. For providing a smaller installed size, the author does not install the CLI's dependencies by default. Only when the CLI is used will it check whether it's dependencies were installed. If not, it will start a child process to install them. The child process would execute an npm install ... command. But that may cause problems such as insufficient permissions in system or failed to find NPM due to environment variables.

Is there a mitigation for this? We tried including the libraries in our own package.json but it still installs them anyway.

Is there a mitigation for this? We tried including the libraries in our own package.json but it still installs them anyway.

Because the libraries are installed in <root>/cli/node_modules instead of <root>/node_modules. You could remove the <root>/cli/package.json and remove the .setup() caller.

https://github.com/protobufjs/protobuf.js/blob/master/cli/pbjs.js#L7
https://github.com/protobufjs/protobuf.js/blob/master/cli/pbts.js#L8

I don't have the option to modify the files inside node_modules as this issue is happening during build on a machines that run npm install for every build.

This is so annoying. Installing packages dynamically!? it should be avoided.

Agreed @cainiaokan . It's easy to avoid because NPM is specifically built the way it's built to avoid things like this.

This is so annoying. Installing packages dynamically!? it should be avoided.

Any update on this? That is 100% accurate in that it should be avoided

add espree@^3.5.4 to devDependencies manually and try again

  "devDependencies": {
    ...
    "estraverse": "^5.1.0",
    "protobufjs": "^6.10.1",
    "estraverse": "^5.1.0",
    "semver": "^7.1.2",
    "uglify-js": "^3.7.7",
    "tmp": "^0.2.0",
    "chalk": "^4.0.0",
    "jsdoc": "^3.6.3"
    ... 
   }

Any update?

It looks like there's a PR that could fix this by divorcing the CLI from the main package. Last updated 3 days ago: https://github.com/protobufjs/protobuf.js/pull/1234

Was this page helpful?
0 / 5 - 0 ratings

Related issues

bennycode picture bennycode  路  3Comments

zD98 picture zD98  路  3Comments

spiderkeys picture spiderkeys  路  5Comments

andiwonder picture andiwonder  路  3Comments

thedillonb picture thedillonb  路  4Comments