不升级服务器node版本,如何自定义node版本构建

975 阅读1分钟

起因

最近发现了一个好玩的css工具库:tailwindcss,可以通过粒子化的类名来控制各种样式,让我基本很少写css代码了,配置自定义主题加上vscode插件提示那些是真香,安利一下。

经过

功能完成之后,发布到测试,哎居然构建失败了,报了一个css语法错误的问题,我在本地build了一次,发现没啥问题,然后去找测试服务器的Node版本是11.0.0,然后找文档发现tailwindcss需要12.13以上,就想升级下Node版本,不过可能会引发这类问题:服务器上很多项目,升级了版本可能会引发其他项目的问题

这时我想到了使用npx这个命令来动态使用node版本进行打包,为了保证构建命令的统一性,保留了npm run build这一命令。

结果

这里修改了package.json build命令文件如下:

 "scripts": {
    "build": "node build",
  },

当执行npm run build时,会执行node build命令,那么我的代码需要写在根目录下/build/index.js文件内,如下:

// 需要先npm install runjs --save-dev
const { run } = require('runjs');
// 自定义使用12.16.1版本
const needVersion = '12.16.1';
// 自定义build命令
if (process.version === 'v' + needVersion) {
  console.log(`begin build node version=${process.version}`);
  // 使用vue-cli构建
  run('vue-cli-service build');
} else {
  // 如果版本不对,则安装12.16.1的版本,再执行build命令
  // build之后会删除12.16.1版本的node,不会影响全局的版本
  run(`npx node@${needVersion} build`);
}

这样的做法只能作为一个临时的解决办法,项目构建时间会变得更长,没有风险的情况下最好还是升级Node一劳永逸。