npm install 之 gRPC

我们这里探讨一下如何在npm install阶段,修改并编译的过程。其中涉及到一些npm的命令,一并解释和学习了。使用案例就是编译grpc。

npm install grpc的时候会触发在package.json(grpc中的)文件中定义的scripts:

 "scripts": {
    "build": "node-pre-gyp build",
    "coverage": "istanbul cover ./node_modules/.bin/_mocha test",
    "electron-build": "node-pre-gyp configure build --runtime=electron --disturl=https://atom.io/download/atom-shell",
    "install": "node-pre-gyp install --fallback-to-build --library=static_library"
  }

根据npm-scripts的说明,其在打包之后会调用scripts中定义的install方法。

Tips:npm默认的install script:"install": "node-gyp rebuild"。如果项目中有binding.gyp文件,而project并没有定义任何的install和preinstall脚本,则会默认install指令使用node-gyp进行编译。
使用--ignore-scripts,则会让npm避免执行package.json文件中的scripts脚本。而只进行打包。也就是并不进行node-pre-gyp的编译环节(针对c++源码和node的配置-binding.grp)

所以我们大体上的思路应该是:

  1. 先安装grpc,并不进行编译:npm install grpc --ignore-scripts
  2. 进入node_modules目录。进入grpc的项目。修改相关源码文件:c++源码在deps/grpc/src/core/lib中。
  3. 重新build grpc:npm run-script install grpc --fallback-to-build --library=static_library 或者 npm rebuild。区别在于rebuild用的是build脚本,其会重新的编译一遍c++的组件。
  4. 再安装其他的组件。

这里要注意一点:如果其他的组件也应用grpc,请注意保持版本的一致性。否则不会生效,他们最自己用自己的grpc版本。

或者

  1. 安装组件,非脚本安装:npm install --ignore-scripts
  2. 修改源码
  3. rebuild:npm rebuild --unsafe-perm --build-from-source

使用--unsafe-perm是避免一些root用户的消息。

如果的全局安装,可以使用npm root -g找到安装路径。

参考链接

  • npm doc build
  • npm doc install
  • npm -- 参数

你可能感兴趣的:(npm install 之 gRPC)