使用mup deploy部署Meteor应用时遇node-pre-gyp未找到错误求助
node-pre-gyp: not found的问题 我来帮你搞定这个报错,node-pre-gyp: not found本质就是构建过程中找不到这个必备工具,结合你给出的环境信息(Meteor 1.4.4.2、Node 4.8.7、Mup 1.3.7、abernix/meteord镜像),给你几个针对性的解决思路:
全局安装node-pre-gyp到构建环境
你用的abernix/meteord:node-4.8.7-base镜像可能默认没预装这个全局包,所以需要在构建阶段添加上。如果用自定义Dockerfile,直接在基础镜像之后加一行:RUN npm install -g node-pre-gyp如果用Mup的默认配置,也可以在
mup.js里通过构建参数注入:module.exports = { servers: { /* 你的服务器配置 */ }, app: { name: '你的应用名', path: '../', docker: { image: 'abernix/meteord:node-4.8.7-base', buildOptions: { buildArgs: { EXTRA_PACKAGES: 'node-pre-gyp' } } } } };检查项目本地依赖是否包含node-pre-gyp
有时候项目里的某个依赖包需要node-pre-gyp,但没把它声明为项目依赖。你可以打开项目的package.json,看看dependencies里有没有node-pre-gyp,如果没有的话,执行:npm install node-pre-gyp --save之后删掉
node_modules和package-lock.json(或npm-shrinkwrap.json),重新跑npm install确保依赖完整,再尝试Mup部署。验证镜像的npm环境配置
有些镜像可能默认用了第三方npm源,导致node-pre-gyp下载失败。可以在构建时指定官方源,比如在Dockerfile里加:RUN npm config set registry https://registry.npmjs.org/另外,也可以同步镜像里的npm版本和你本地的4.6.1版本,避免版本差异导致的问题:
RUN npm install -g npm@4.6.1利用Mup的预构建脚本提前安装
在mup.js的app配置里添加beforeBuild脚本,让Mup在构建前先全局安装node-pre-gyp:app: { // 其他配置 beforeBuild: [ 'npm install -g node-pre-gyp' ] }
这些方法应该能解决你的问题,优先试试全局安装的方式,因为这是最直接补充缺失工具的方案。
内容的提问来源于stack exchange,提问作者Peter T.

