起因
最近发现了一个好玩的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一劳永逸。