create-react-app在Node 14+上使用本地模板文件失败

7bsow1i6  于 3个月前  发布在  React
关注(0)|答案(2)|浏览(42)

在Node 14+上运行create-react-app时,项目无法创建。相反,会返回一个错误,指出模板文件中找不到package.json,尽管实际上存在package.json。即使下载了官方模板的副本,这也不是我模板中的问题。

根据我的调查,问题出在Node 14开始时,tar-pack中的unpack函数在文件解压完成之前触发回调函数。因此,当createReactApp.js查找package.json文件时,它还不存在。

tar-pack似乎已经不再维护,但an issue已经被打开解决这个问题。问题在于tar-pack使用的PassThrough流触发了两次关闭事件。一次是在gunzip完成时,另一次是在untar完成时。不幸的是,回调函数在第一次关闭事件发生之前就被触发了。这种情况只发生在Node 14上。

tar-pack使用版本2.2.1的node-tar(仅是npm上的tar)。node-tar的最新版本是6.1.0,似乎包含了许多当时tar-pack实现的功能。例如,tar 6.1.0支持在解压之前解压缩tgz文件,还包括确保不创建不可读文件的功能。我认为用node-tar替换tar-pack可能是有意义的。我在自己的环境中尝试了这个方法,将extractStream函数更改为以下内容:

function extractStream(stream, dest) {
return new Promise((resolve, reject) => {
stream
.pipe(tar.x({ cwd: dest, strip: 1 }))
.on('error', err => {
reject(err);
})
.on('end', resolve(dest));
});
}

这似乎效果很好,但我还没有在我自己的主环境之外的环境进行测试。如果这种方法可行,我会很高兴进行更多的测试并提交pull request。

gwbalxhn

gwbalxhn1#

我也在WP5分支上遇到了同样的问题。尝试创建一个项目,但是失败了。

3yhwsihp

3yhwsihp2#

这个问题只存在于Windows环境中,在MacOS上运行时没有错误。

相关问题