在tsconfig.json中使用@rollup/stream和es6 target时,Gulp 4任务无法完成

nhn9ugyo  于 2022-12-08  发布在  Gulp
关注(0)|答案(2)|浏览(242)

我的应用程序依赖于一个公司内部的TS库,该库很少被编辑。我刚刚更新了它,现在用于构建它的一个gulp任务将失败。所有其他任务将独立工作或顺序/并行使用,但使用@rollup/stream包的任务导致gulp在声明自己完成后挂起。这是在构建自动化最终终止构建时发现的,因为它已经暂停了2个小时等待吞咽任务完成。
我不得不更新我们的内部库,因为它是失败的建设,由于以下问题。

'rollup' errored after 1.51 s
Error: '__spreadArray' is not exported by node_modules\tslib\tslib.es6.js, imported by src\ObjectUtils.ts

因此,我将tsconfig.json文件从"target": "es5",更新为"target": "es6",,这导致了汇总挂起。
运行gulp rollup将得到以下输出

Using gulpfile path/to/gulp/file
Starting 'rollup'...
//
// Outputs all the files being rolled up here...
//
Finished 'rollup' after 1.43 s
// The gulp process then stays open instead of closing and returning me to my prompt

举个例子,我在本地运行了这个任务,后来我自己用control+c退出了它,它报告说在那里等待了10 m15 s

在阅读了所有文档和我能找到的SO问题之后,我确信我们正在按照文档建议的async gulp tasks来处理流,但它不起作用。然后我尝试自己使用.on('end', () => { //etc })手动关闭返回的汇总流,将内容 Package 在promise中,并返回一个promise,当流完成时,使用为每个任务函数提供的回调函数来解析。上述情况的组合,但我无法使汇总任务正确完成并将控制返回到提示符。
我已经包含了gulpfile的相关部分、tsconfig.json和package.json依赖项。
第一个
如果事实证明我可以继续在tsconfig.json中使用"target": "es5",,并且找到了__spreadArray问题的修复程序,那么我也可以这样做。

dfty9e19

dfty9e191#

我被困在两个不同的错误之间:

  • tsconfig.json设置中,"target" : "ES6"将因从未退出吞咽任务而中断。
  • tsconfig.json中,设置为"target" : "ES5"将报告tslib中缺少__spreadArray函数。

下面是我如何解决这个问题的:
1.正在将所有开发依赖项更新为最新版本。
1.使用npm i --save-dev tslib手动tslib以确保有最新版本可用。因为我在步骤1中更新了TS版本。它应该包括最新的tslib,这可能是不必要的...但无论如何手动包括它感觉很好。
1.我发现了一个建议,使用@rollup/plugin-typescript的一个fork,名为rollup-plugin-typescript2,使它工作。这本身是一个奇怪的问题,因为假定该fork的存在只是为了在控制台中添加错误日志,告诉你任何TS错误。但现在原来的项目也输出错误,但对我们来说,它不能与gulp一起工作(或者可能只有我)了。fork在npm上保持并且很流行,所以我不太担心,但是我仍然希望使用“官方”软件包。显然,我改变了我的gulpfile.js,使用这个新的软件包,但是它“就API而言,这是一个下降的替代品。
1.还向tsconfig.json添加了paths值以指向已安装的tslib节点模块,我手动检查了该模块以确保它具有我们需要的__spreadArray函数。
以上几种方法的组合修复了这个问题。可能3和4是主要的修复方法。
以下是我的tsconfig.json的更新版本和我的package.json的相关部分,以防对未来的读者有用。
第一个

gstyhher

gstyhher2#

FWIW,我认为挂起可能是 typescript 4.4.2中的一个bug,它与汇总(也许,然后,吞咽)相互作用......应该很快就能修复。请参阅https://github.com/rollup/plugins/issues/983

相关问题