背景
项目:一个 nuxt 架构的前端项目
要发布了,运营告诉我不能在生产机上运行 npm install
,那就拷贝一个 node_modules 用呗。然后就在测试环境运行了 npm install
、 zip node_modules.zip node_modules
这两个命令做了安装并压缩 node_modules, 再把node_modules.zip传到生产机上解压使用。
问题
然后在生产机上执行 npm run build:prod
构建项目,报错。
[*************** dist]$ npm run build:prod
> ************************
> cross-env BUILD_ENV=production nuxt build
module.js:549
throw err;
^
Error: Cannot find module '..'
at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (**************/dist/node_modules/.bin/cross-env:3:18)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR!******************** build:prod: `cross-env BUILD_ENV=production nuxt build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the *************** build:prod script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! **************/2020-08-05T09_35_36_129Z-debug.log
这个问题的原因是 node_modules/.bin/ 内的软链接(符号连接)被替换成指向的文件,所以执行代码的时候就各种 module 路径不对。
解决办法
思来想去可能是压缩的时候软链接丢失。 开始google, 结果如下:
-
zip 参数 -y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
zip -yr node_modules.zip node_modules
解压后的 .bin:
zip 参数参考地址:www.runoob.com/linux/linux…
-
tar + gzip
tar 是打包工具,参数 -z或--gzip或--ungzip 通过gzip指令处理备份文件tar -czvf node_modules.tar.gz node_modules
解压后的 .bin:
tar 参数参考地址:www.runoob.com/linux/linux…