如何在最新的node docker镜像上将npm升级到npm @ 5?

在本地,我通过以下方式成功安装了npm @ 5:

$ npm install npm@5 -g $ npm -v $ 5.0.0 

而在本地,我可以运行npm安装就好了(基本上是npm i && tsc

 $ npm run setup updated 102 packages in 3.499s 

然而现在我也有一个基于node:7.10-alpine的Dockerfile node:7.10-alpine image如果我尝试在那里安装npm@5就会中断。

我的Dockerfile看起来像这样:

 FROM node:7.10-alpine WORKDIR /usr/hive-updater/ ENV LAST_UPDATED=2016-12-08 NPM_CONFIG_LOGLEVEL=warn TERM=xterm PATH="$PATH:/usr/hive-updater/node_modules/.bin" RUN npm install npm@5 -g && npm -v COPY ./ ./ RUN npm run setup CMD ["node"] 

npm -v期间,这将失败:

 module.js:472 throw err; ^ Error: Cannot find module 'semver' at Function.Module._resolveFilename (module.js:470:15) at Function.Module._load (module.js:418:25) at Module.require (module.js:498:17) at require (internal/module.js:20:19) at Object.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/unsupported.js:2:14) at Module._compile (module.js:571:32) at Object.Module._extensions..js (module.js:580:10) at Module.load (module.js:488:32) at tryModuleLoad (module.js:447:12) at Function.Module._load (module.js:439:3) 

如何获得我的docker集装箱最新的NPM?

我发现这个节点的高山图像是用纱线运送的 。

纱是Facebook的npmreplace,你可以用它来全局安装npm @ 5:

 RUN npm -v RUN yarn global add npm@5 RUN npm -v COPY ./ ./ RUN npm run setup 

(版本调用是多余的,只是为了强调升级工作。)

现在它的工作原理是:

 Step 4/9 : RUN npm -v ---> Running in dca435fbec59 4.2.0 ---> f6635e6c92a3 Removing intermediate container dca435fbec59 Step 5/9 : RUN yarn global add npm@5 ---> Running in fac7216ccd91 yarn global v0.24.4 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh packages... success Installed "npm@5.0.0" with binaries: - npm Done in 10.47s. ---> b6b2e0f3fc36 Removing intermediate container fac7216ccd91 Step 6/9 : RUN npm -v ---> Running in 38a9ee95b9f0 5.0.0 ---> d1632fc97b7e Removing intermediate container 38a9ee95b9f0 Step 7/9 : COPY ./ ./ ---> b9b62f53ca48 Removing intermediate container e9dd065c022f Step 8/9 : RUN npm run setup ---> Running in aec36af706d4 > hive-updater@1.0.0 setup /usr/hive-updater > npm install --quiet && npm run build added 102 packages in 5.156s > hive-updater@1.0.0 build /usr/hive-updater > tsc 

所以,如果你的npm低于5版,升级方法就会中断,那么安装yarn来升级npm¯\ _(ツ)_ /¯


旁注

使用纱线代替npm @ 5可能会更好。 它仍然有强大的性能优势。

比较这两个caching:

 yarn install v0.24.5 [1/4] Resolving packages... success Already up-to-date. Done in 0.31s. 

用npm @ 5:

 npm install updated 102 packages in 3.069s 

我不知道yarn已经装上了高山的形象。