记录一次 npm 项目构建失败的排查解决过程
该项目初次构建没问题,但是第二次构建的时候,却失败报错,在这里将排查解决的过程记录如下。
异常一
异常信息如下(其实是警告):
[exec] npm WARN deprecated core-js@3.18.3: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
该异常在初次构建的时候也出现了,但是由于整体项目构建是成功的,所以忽略了该 WARN
异常信息。
异常原因
npm WARN deprecated core-js@3.18.3:core-js@<3.23.3 不再维护,由于问题数量不推荐使用。 由于 V8 引擎的奇思妙想,旧 core-js 版本中的功能检测可能会导致减速高达 100 倍,即使没有任何 polyfill。 某些版本存在网络兼容性问题。 请将您的依赖项升级到 core-js 的实际版本。
解决方案
将依赖项升级到 core js 的实际版本:
npm install --save core-js@3.23.3
异常二
异常信息如下:
[exec] npm ERR! Cannot read property 'pickAlgorithm' of null
异常原因
需要删除依赖包,重新 npm。
一般也可以通过删除 node_modules
并再次 package-lock.json
运行来解决它 npm install
。
解决方案
清理缓存:
npm cache clear --force
再次安装依赖:
npm install
即,在构建文件 build.xml 中修改配置如下:
<target name="compress-web">
<mkdir dir="${compress.dir}"/>
<antcall target="cp"/>
<exec dir="${compress.dir}" executable="${npm}" failonerror="true">
<arg line="cache clear --force "/>
</exec>
</target>
异常三
异常信息如下:
[exec] npm ERR! command failed
[exec] npm ERR! command sh -c node install.js
[exec] npm ERR! PhantomJS not found on PATH
[exec] npm ERR! Downloading https://npm.taobao.org/dist/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
[exec] npm ERR! Saving to /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
[exec] npm ERR! Receiving...
[exec] npm ERR! Error requesting archive.
[exec] npm ERR! Status: 404
[exec] npm ERR! Make sure your network and proxy settings are correct.
[exec] npm ERR!
[exec] npm ERR! If you continue to have issues, please report this full log at https://github.com/Medium/phantomjs
解决方案
指定源:
npm install --registry=http://registry.npm.taobao.org
即,在构建文件 build.xml 中修改配置如下:
<target name="npmInstall">
<exec dir="${compress.dir}" executable="${npm}" failonerror="true">
<arg line="install --registry=http://registry.npm.taobao.org"/>
</exec>
</target>
至此,重新构建后即可成功了。
复盘
第一个报错是警告,主要还是第二个报错,需要清理缓存。
主要是将 package-lock.json
文件提交到了 Git 仓库。所以需要额外清理下缓存。
如果将 package-lock.json
文件添加到 .gitignore
中,应该就不需要额外清理了。
要么就需要配置 npm cache clear --force
清理下。
相关文章