我已经通过“npm install”安装了 Node.js 模块,然后我尝试在命令提示符下执行 gulp sass-watch
。之后,我得到了以下回复。
[18:18:32] Requiring external module babel-register
fs.js:27
const { Math, Object, Reflect } = primordials;
^
ReferenceError: primordials is not defined
我在 gulp sass-watch
之前尝试过这个:
npm -g install gulp-cli
我遇到了同样的错误。我怀疑您使用的是 Node.js 12 和 Gulp.js 3。这种组合不起作用:Gulp.js 3 is broken on Node.js 12 #2324
月之前的解决方法也不起作用:After update to Node.js 11.0.0 running Gulp.js exits with 'ReferenceError: internalBinding is not defined' #2246
解决方案:升级到 Gulp.js 4 或降级到 Node.js 的早期版本。
在将依赖于 gulp@3.9.1
的旧项目更新到 Node.js 12+ 时,我们遇到了同样的问题。
这些修复使您能够通过将 graceful-fs
覆盖到版本 ^4.2.9
来使用带有 gulp@3.9.1
的 Node.js 12+。
如果您使用的是纱线 v1
纱线 v1 supports resolving a package to a defined version。您需要将 resolutions
部分添加到 package.json
:
{
// Your current package.json contents
"resolutions": {
"graceful-fs": "^4.2.9"
}
}
感谢@jazd以这种方式解决问题。
如果您使用的是 npm >= 8.3.0
npm@^8.3.0
使您能够覆盖项目依赖包的版本。为此,您应该在 package.json 中添加 an overrides
section:
{
// Your current package.json
"overrides": {
"graceful-fs": "^4.2.9"
}
}
如果您使用的是 npm < 8.3.0
使用 npm-force-resolutions
作为预安装脚本,您可以获得与使用 yarn v1 类似的结果。您需要以这种方式修改您的 package.json:
{
// Your current package.json
"scripts": {
// Your current package.json scripts
"preinstall": "npx npm-force-resolutions"
},
"resolutions": {
"graceful-fs": "^4.2.9"
}
}
npm-force-resolutions
将更改 package-lock.json
文件以在 install
完成之前将 graceful-fs
设置为所需的版本。
如果您在项目中使用自定义 .npmrc
文件并且它包含代理或自定义注册表,您可能需要将 npx npm-force-resolutions
更改为 npx --userconfig .npmrc npm-force-resolutions
,因为到目前为止,npx
不使用当前文件夹.npmrc
文件。
问题的根源
此问题源于 graceful-fs@^3.0.0
上的 gulp@3.9.1
depends 对 Node.js fs
模块进行了猴子补丁。
在 11.15 版之前,这一直与 Node.js 一起使用(这是来自开发分支的 version,不应在生产中使用)。
graceful-fs@^4.0.0
不再对 Node.js fs
模块进行monkeypatch,这使其与 Node.js > 11.15(经过测试并使用版本 12 和 14)。
请注意,这不是一个长期的解决方案,但当您没有时间更新到 gulp@^4.0.0
时,它会有所帮助。
package-lock.json
,npx npm-force-resolutions
将不再起作用。要解决此问题,请使用 "preinstall": "npm install --package-lock-only --ignore-scripts && npx npm-force-resolutions"
(source)。
一分钟搞定:
只需关注 these steps。我在 Windows 10 上,它非常适合我!
在 package.json 所在的同一目录中,创建一个 npm-shrinkwrap.json 文件,其内容如下: { "dependencies": { "graceful-fs": { "version": "4.2.2" } } } Run npm安装,不用担心,它会用一堆内容更新 npm-shrinkwrap.json。运行 gulp 启动项目。
npm i
,它会再次损坏。
shrinkwrap.json
文件是在npm install
之后修改的,如果要再次运行,需要将其删除。解决方案是在您的 package.json
scripts
节点中添加一行:"preinstall": "cp npm-shrinkwrap.gulp.json npm-shrinkwrap.json"
,其中 npm-shrinkwrap.gulp.json
是需要的,将在 npm 安装之前复制到 npm-shrinkwrap.json
。 (在 Windows 上将 cp
更改为 copy
)
使用以下命令并安装 Node.js v11.15.0:
npm install -g n
sudo n 11.15.0
将解决
ReferenceError: primordials 未在节点中定义
参考@Terje Norderhaug @Tom Corelis 的答案。
使用以下命令安装 Node.js v11.15.0 和 Gulp.js v3.9.1:
npm install -g n
sudo n 11.15.0
npm install gulp@^3.9.1
npm install
npm rebuild node-sass
它将解决这个问题:
ReferenceError: primordials 未在节点中定义
sudo n 11.15.0
中的 n
应该是在第一步 npm install -g n
中安装的。那是什么?它仍然有效吗?
npm install gulp@^3.9.1
时遇到权限问题,请按照本指南中的步骤操作 docs.npmjs.com/…
对我来说,Diego Fortes' answer 只需稍作改动即可。
如果出现此错误,这是我的工作流程:
npm install npm install gulp create file npm-shrinkwrap.json with { "dependencies": { "graceful-fs": { "version": "4.2.2" } } } npm install (again) (不是 npm install gulp 了!非常重要 - 否则错误会回来)gulp(现在工作)
npm i
,它会再次损坏。
使用 NVM 管理您使用的 Node.js 版本,运行以下命令对我有用:
cd /to/your/project/
nvm install lts/dubnium
nvm use lts/dubnium
yarn upgrade # or `npm install`
10
代替代码名称。
TL:博士
Gulp 3.*
不适用于 Node.js 12.*
或更高版本。你必须降级 Node.js,或者升级 Gulp。
如果时间紧迫,请将 Node.js 降级到 v11.* 或以下;如果您需要更新的功能,并且有时间修复大量损坏的依赖项,请将 Gulp 升级到 4.* 或更高版本!
正如其他人已经提到的那样,Node.js 12 或更高版本不支持 Gulp 3.*,因此您必须将 Node 版本降级到 11.* 或更低版本,或者将 Gulp 升级到 4.0。
最佳选择最终取决于您有多少时间,因为升级 Gulp 会带来更清洁的 gulpfile 和对在 series or parallel 中运行任务的内置控制的好处,但也依赖于您将 gulpfile 重写为新语法,并且 可能(阅读:可能会 - 见此评论的结尾)会导致与某些依赖项发生冲突。
降级 Node.js
这是最简单和最快的选择。特别是如果您使用 n 或 nvm,因为它们允许您非常快速地安装和在 Node.js 版本之间切换。
在 N 上安装 Node.js 版本
n 10.16.0
在 NVM 上安装 Node.js 版本
nvm install 10.16.0
完成此操作后,您可能需要重新构建您的 npm dependencies,或者删除您的 node_modules
文件夹和您的 package-lock.json
文件并重新安装您的依赖项。尽管如果您只是恢复到先前存在的 Node.js 版本,您可能应该没问题。
升级 Gulp
如上所述,这是一项更耗时的任务,但从长远来看,它可能会带来好处。例如,Node.js 12 现在引入了对 ES 模块的本机支持(在实验标志后面)和 Node.js 13 中的完全支持。
您可能需要升级 Node.js 才能使用它,从而迫使您升级 Gulp。或者您可能只是想要使用 Gulp 4 的好处,因为它提供了对编写任务的更好和更有效的控制。
已经有很多关于这方面的文章,所以我不会进一步详细说明细节,但重申一下 - 这不是一项快速的工作。根据您项目的大小,可能需要进行一些显着的重写,并且您的依赖项可能会中断。如果你时间不够用,你应该选择简单地降级 Node.js,至少是暂时的。
但是我已经有了 Gulp 4,它仍然无法正常工作!
如果像我一样,您已经在使用 Gulp 4+(我使用 Gulp 4.0.2
,最初在 Node.js 10 上)并且最近升级(我升级到 Node.js 13.8.0),您是否仍然遇到问题,这可能是因为依赖项依赖于旧版本的 Gulp,而这正被管道捕获。
在我的例子中,gulp-combine-mq
是使用 Gulp 3.9.* 的依赖项。在我的 gulpfile 中禁用此任务允许 Gulp 再次运行。
如果发生这种情况,您有几个选择。你可以,
如果不是绝对必要,请不要使用插件 寻找替代方案,修复插件
不用说,如果您有几个依赖于旧版本 Gulp 的插件 - 特别是如果这些插件对您的应用程序至关重要 - 这可能会花费大量额外的时间来升级 Gulp(因此上面的警告) .
如果发生这种情况,最好只降级 Node.js,至少在可以发布补丁之前。
npm ls graceful-fs
可以找到罪魁祸首 - 使用低于 4 版本的优雅 fs 的包将导致此问题。从 gulpfile 中删除它,使用替代方案或升级它来解决问题。
简单优雅的解决方案
只需按照以下步骤操作。它与 npm install 运行多次或安装任何其他模块甚至将项目发布到工件完美配合。
在您拥有 package.json 的同一目录中,创建一个 npm-shrinkwrap.json 文件,其中包含以下内容:
{
"dependencies": {
"graceful-fs": {
"version": "4.2.2"
}
}
}
运行 npm install,别担心,它会用一堆内容更新 npm-shrinkwrap.json。让我们通过更新 package.json 脚本选项来摆脱这个更新。
"scripts": {
"preshrinkwrap": "git checkout -- npm-shrinkwrap.json",
"postshrinkwrap": "git checkout -- npm-shrinkwrap.json"
}
现在您可以运行 npm install 并且您的 npm-shrinkwrap.json 将完好无损并且将永远工作。
npm i bla
,它只安装了graceful-fs + 新的,但是所有其他模块都丢失了,对你来说是一样的吗?
Gulp 3.9.1 不适用于 Node v12.xx,如果升级到 Gulp 4.0.2,则必须使用新语法(系列和并行)完全更改 gulpfile.js。所以你最好的选择是通过简单地在终端中使用以下代码来降级到 Node.js v 11.xx(11.15.0 版本对我来说很好用):
nvm install 11.15.0
nvm use 11.15.0 # Just in case it didn't automatically select the 11.15.0 as the main node.
nvm uninstall 13.1.0
npm rebuild node-sass
我有同样的错误。当我更新所有软件包并在 package.json
中提到 与我的本地工作系统中相同的 Node.js 引擎版本和 npm 版本时,我终于解决了这个问题。
"engines": {
"node": "10.15.3",
"npm": "6.9.0"
}
在 Heroku 上部署时出现此错误。
有关更多信息,请查看 Heroku support。
检查 Node.js 版本:
node --version
检查 gulp 版本:
gulp -v
如果 Node.js >=12 并且 gulp <= 3,请执行以下操作之一:
升级 gulp
sudo npm install -g gulp
降级节点
sudo npm install -g n
sudo n 11.15.0
How to Upgrade (or Downgrade) Node.js Using npm
如果问题不是来自 gulp
,请检查 unzip npm 模块。自上次更新以来已经过去了大约六年。它不适用于 Node.js > v11。
尝试这个:
npm install -g n
sudo n 11.15.0
unzip2
相同。但是,unzip2
有一个有效的替代品 - node-unzip-2
unzipper
fork 而不是 github.com/EvanOxfeld/node-unzip/issues/…
这个错误是因为新版本的Node.js(12)和旧版本的Gulp(小于4)。
不建议降级 Node.js 和其他依赖项。我通过更新 package.json
文件解决了这个问题,获取所有依赖项的最新版本。为此,我使用 npm-check-updates
。它是一个使用所有依赖项的最新版本更新 package.json
的模块。
参考:https://www.npmjs.com/package/npm-check-updates
npm i -g npm-check-updates
ncu -u
npm install
在大多数情况下,我们必须更新 gulpfile.js
,如下所示:
参考:Gulp 4: The new task execution system - gulp.parallel and gulp.series, Migration
前:
gulp.task(
'sass', function () {
return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])
....
}
);
Other configuration...
gulp.task(
'watch', function () {
gulp.watch(sourcePath + '/sass/**/*.scss', ['sass']);
}
);
后:
gulp.task('sass', gulp.series(function(done) {
return gulp.src([sourcePath + '/sass/**/*.scss', "!" + sourcePath + "/sass/**/_*.scss"])
...
done();
}));
Other config...
gulp.task(
'watch', function () {
gulp.watch(sourcePath + '/sass/**/*.scss', gulp.series('sass'));
}
);
我仅在 Visual Studio 的 Task Runner Explorer 中出现此问题,而不是在从命令行或 PowerShell 运行时出现。
我意识到 VS 忽略了我用 NVM 设置的 Node 版本。
https://i.stack.imgur.com/1ZR19.png
降级到 Node.js stable 为我解决了这个问题,因为它发生在我升级到 Node.js 12 之后:
sudo n 10.16.0
n
:'npm install -g n'
我遇到了同样的问题。我尝试了什么,什么对我有用:
检查 Node.js 和 Gulp.js 的版本(Node.js v12 和低于 v4 的 Gulp.js 的组合不起作用)我通过以下方式降级了 NPM 版本: sudo NPM install -gn sudo n 10.16.0
它工作得很好。然后只需按照控制台的说明进行操作即可。
升级到 4.0.1 并确保迁移 https://fettblog.eu/gulp-4-parallel-and-series/#migration
我在 Windows 10 上遇到此错误。结果是漫游配置文件损坏。
npm ERR! node v12.4.0
npm ERR! npm v3.3.12
npm ERR! primordials is not defined
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
删除 C:\Users\{user}\AppData\Roaming\npm
文件夹解决了我的问题。
如果在使用最新的 gulp ^4.0 时保留 Node.js v12,请按照以下步骤操作:
使用以下命令更新命令行界面(只是为了预防起见):
npm i gulp-cli -g
添加/更新 package.json 文件的依赖项部分下的 gulp
"dependencies": {
"gulp": "^4.0.0"
}
删除您的 package-lock.json
文件。
删除您的 node_modules
文件夹。
最后,运行 npm i
以升级并重新创建一个全新的 node_modules 文件夹和 package-lock.json 文件,并为 Gulp ^4.0 提供正确的参数:
npm i
注意 Gulp.js 4.0 引入了 series()
和 parallel()
方法来组合任务,而不是 Gulp 3 中使用的数组方法,因此您可能会也可能不会在旧 {3 } 脚本。
要了解有关应用这些新功能的更多信息,this site 确实做到了:How to Migrate to Gulp.js 4.0
gulp-cli
有什么用?我按照您的步骤进行操作,最初一切正常;但后来我卸载了 gulp-cli
(因为我没有看到它在哪里被使用),一切仍然有效。不过,感谢您的回答,因为我已经使用节点 v12.9.1
和 Gulp 4.0.2
再次启动并运行!
gulp-cli
是命令行实用程序。它确保正确安装 gulp 正如您在此处的 gulp 安装步骤中所见:gulpjs.com/docs/en/getting-started/quick-start
我通过从添加或删除程序 → Node.js 卸载 Node.js 在 Windows 10 上解决了这个问题。
然后我从 https://nodejs.org/download/release/v11.15.0/ 安装了 11.15.0 版
如果您运行的是 64 位 Windows,请选择 node-v11.15.0-x64.msi。
如果您尝试安装 semantic-ui
并且出现以下错误,请尝试从 Node.js.org 下载具有最新功能的最新版本的 Node.js js(13.5.0)
。
此外,与其尝试 NPM 安装语义,不如将链接(可以从 cdnjs link 中找到)添加到 index.html
文件的标题中。
Gulp 对 Node.js 版本 11 及更高版本提出了问题。卸载当前的 Node.js 版本并重新安装 v10.15.1
版本。这是该版本的链接。这对我有帮助,也可以解决您的问题。
https://nodejs.org/download/release/v10.15.1/
安装 gulp 并将您的 Node.js 版本添加到 package.json 文件中,如下所示:
{
"dependencies": {
"node": "^10.16.3"
}
}
我已经尝试了很多建议来解决我的 Windows 10 机器上的现有项目的这个问题,并最终按照这些步骤来解决它;
从“添加或删除程序”卸载 Node.js。启动一个新的命令提示符并键入 gulp -v 然后 node -v 以检查它是否已完全卸载。
下载并安装 Node.js v10.16.0 - 不是最新的,因为据我所知,最新的节点和 gulp 组合导致了问题。在安装过程中,我没有更改我通常做的安装路径(C:\Program Files\nodejs)。
打开一个新的命令提示符,转到您的项目目录,其中您有 gulpfile.js 并启动 gulp,如图所示。
请注意,有时当我在 git 分支之间切换时,我可能需要关闭我的 Visual Studio 并再次以管理员身份运行它才能看到此解决方案再次运行。
据我所知,这个问题是在我为一个新项目安装了最新推荐的 Node.js 版本(12.18.4)之后开始发生的,而我只有在一些 FE 更改没有反映在现有 Web 项目上时才意识到这一点。
更新:今天我在新 PC 上设置现有项目之一时遇到了同样的问题,我做了同样的步骤 + 转到我有 gulpfile 的目录,然后运行 npm install
。
https://i.stack.imgur.com/ZiqgX.jpg
看来您已将 nodejs 的版本升级为 +12 并且仍在使用 gulp 3.9.1
您可以使用以下解决方案之一
将您的 gup 版本升级为 +4
或者干脆你使用 NVM Node version Manager 在同一台机器上运行多个 nodejs 版本。
我遇到了同样的错误,但它是由不同的问题引起的。
OS: windows 10
nodejs version: 15.12.0
npm version: 7.6.3
问题的原因是优雅的 fs 包。每当我尝试运行 npm 时,即使运行 npm-v 也会触发“ReferenceError: primordials is not defined”。
我尝试运行 npm install graceful-fs@latest,但它仍然没有工作,即使包是最新版本。
那么是什么帮助了我呢?
运行 npm ls graceful-fs
这样,您将找到 graceful-fs
所依赖的所有包以及它具有的版本。就我而言,它主要是 3.0 版,即使我已经安装了 4.2.6 版
那么如何解决呢?
打开 npm-shrinkwrap.json(不确定 packages-lock.json)并更改搜索 graceful-fs
- 您会看到它在一些地方有旧版本。将其替换为 ^4.2.6
(或更新版本)。
然后 npm audit fix --force
将在任何地方强制安装较新版本。
希望这对您有用,我花了几个小时才找到解决方法。
删除 package-lock.json 或 yarn.lock 文件。
然后删除 node_modules。
之后修改 package.json 文件 - "dependencies": { "gulp": "^4.0.0" }
然后运行 - npm install
解决这个问题就足够了。
这是因为您的系统中 node
和 gulp
之间的兼容性问题。降级 node
或升级 gulp
将解决此问题。
sudo npm i -g n
sudo n 11.15.0
如果仍然无法正常工作,请尝试删除 node_modules
文件夹和 package-lock.json
文件并使用 npm i
命令重新安装。
对于使用 Yarn 的用户:
yarn global add n
n 11.15.0
yarn install # Have to install again
v12.1.0
和 gulpgulp@4.0.2
但它不起作用v14
和 gulpv4
。我仍然得到这个问题:(