本文概述
在进行一个在我的环境中使用gulp的项目时, 我注意到在办公室中其他朋友的环境中运行良好的同一项目在我的环境中不起作用。它抛出了提到的异常, 参考错误:primordials未定义错误。
似乎gulp v3在Node.js 12环境上运行时会遇到麻烦, 因为其中一个依赖项, 即graceful-fs(fs模块的直接替代品, 进行了各种改进)与此不兼容。版本的节点。因此, 解决此问题的选项很明确:
- 你可以升级到gulp v4(修改源代码, 花费大量时间)。
- 专门降级项目中graceful -fs的版本。
由于我们不能简单地重写代码(因为这对我们没有任何经济利益), 因此解决方法是简单地强制我们的项目安装特定版本4.2.2的graceful-fs。这就是你将在本文中学习的方法。
1.删除node_modules
第一步, 你将需要删除所有已安装的依赖项, 因为如果你尝试运行npm install, 则相同的依赖项将保留在相同的版本中, 但是我们的解决方案会强制降级graceful-fs。因此, 只需删除node_modules目录。
2.创建npm-shrinkwrap.json
除去依赖关系目录后, 继续在项目的同一目录(package.json所在的目录)中创建以下文件, 即npm-shrinkwrap.json文件, 其中包含以下内容:
{
"dependencies": {
"graceful-fs": {
"version": "4.2.2"
}
}
}
你可以在此处的NPM官方文档中找到有关此文件的详细说明。
3.安装依赖项
创建步骤2的文件后, 请再次使用npm安装项目的依赖项:
npm install
这将开始安装依赖项, 并且npm将警告你有关shrinkwrap文件的lockfileversion:
这也会修改以前创建的npm-shrinkwrap.json文件, 其中包含许多内容, 如下所示:
{
"name": "yourproject_name", "version": "x.x.x", "lockfileVersion": 1, "requires": true, "dependencies": {
// .. //
"@gulp-sourcemaps/identity-map": {
"version": "1.0.2", "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", "dev": true, "requires": {
"acorn": "^5.0.3", "css": "^2.2.1", "normalize-path": "^2.1.1", "source-map": "^0.6.0", "through2": "^2.0.3"
}
}
// .. //
}
}
你暂时可以忽略此。安装依赖项后, 一切都应按预期工作, 并且构建应照常成功:
gulp build --production
编码愉快❤️!
评论前必须登录!
注册