记录一次 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 清理下。