Umi: build失败:AssertionError [ERR_ASSERTION]: chunk of vendors not found.

Created on 16 Sep 2020  ·  17Comments  ·  Source: umijs/umi

正常build,报错信息如下

yarn run v1.12.3
$ cross-env API_ENV=test umi build

* Webpack █████████████████████████ after chunk asset optimization (93%)


AssertionError [ERR_ASSERTION]: chunk of vendors not found.
    at D:\Code\Mine\Github\YuandingNew\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:104:27
    at Array.forEach (<anonymous>)
    at chunksToFiles (D:\Code\Mine\Github\YuandingNew\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:93:14)
    at D:\Code\Mine\Github\YuandingNew\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:186:32
    at Generator.next (<anonymous>)
    at asyncGeneratorStep (D:\Code\Mine\Github\YuandingNew\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:62:103)
    at _next (D:\Code\Mine\Github\YuandingNew\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:64:194)
    at processTicksAndRejections (internal/process/task_queues.js:97:5) {
  generatedMessage: false,
  code: 'ERR_ASSERTION',
  actual: undefined,
  expected: true,
  operator: '=='
}
build failed
Error: build failed
    at D:\Code\Mine\Github\YuandingNew\node_modules\@umijs\bundler-webpack\lib\index.js:108:27
    at finalCallback (D:\Code\Mine\Github\YuandingNew\node_modules\webpack\lib\MultiCompiler.js:254:12)
    at D:\Code\Mine\Github\YuandingNew\node_modules\webpack\lib\MultiCompiler.js:275:14
    at D:\Code\Mine\Github\YuandingNew\node_modules\neo-async\async.js:2830:7
    at done (D:\Code\Mine\Github\YuandingNew\node_modules\neo-async\async.js:2925:13)
    at D:\Code\Mine\Github\YuandingNew\node_modules\webpack\lib\MultiCompiler.js:186:23
    at D:\Code\Mine\Github\YuandingNew\node_modules\webpack\lib\MultiCompiler.js:267:15
    at finalCallback (D:\Code\Mine\Github\YuandingNew\node_modules\webpack\lib\Compiler.js:257:39)
    at D:\Code\Mine\Github\YuandingNew\node_modules\webpack\lib\Compiler.js:279:21
    at D:\Code\Mine\Github\YuandingNew\node_modules\webpack\lib\Compiler.js:492:20
    at eval (eval at create (D:\Code\Mine\Github\YuandingNew\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:62:1)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

All 17 comments

如何复现?

无法复现了

我仍然可以复现,就按照官网上的配置写,执行yarn start的时候就会报这个错:

(node:84004) UnhandledPromiseRejectionWarning: AssertionError [ERR_ASSERTION]: chunk of vendors not found.
    at D:\bedroom\gitrepo\ruanshizi_mono\ruanshizi5\frontend-umi\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:104:27
    at Array.forEach (<anonymous>)
    at chunksToFiles (D:\bedroom\gitrepo\ruanshizi_mono\ruanshizi5\frontend-umi\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:93:14)
    at D:\bedroom\gitrepo\ruanshizi_mono\ruanshizi5\frontend-umi\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:186:32
    at Generator.next (<anonymous>)
    at asyncGeneratorStep (D:\bedroom\gitrepo\ruanshizi_mono\ruanshizi5\frontend-umi\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:62:103)
    at _next (D:\bedroom\gitrepo\ruanshizi_mono\ruanshizi5\frontend-umi\node_modules\@umijs\preset-built-in\lib\plugins\commands\htmlUtils.js:64:194)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
(node:84004) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:84004) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

umi 3.2.20 配置splitchunk之后 仍然有此问题

看来这非个例,还是open吧

出问题的有没有在 service 里面引入 page 文件里的东西,可能跟这个有关,我有小伙伴也遇到了这个问题,例如这样:
image

如何复现?

按照官网配置,umi3.2.24 同样也复现了

如何复现?

复现仓库: https://github.com/zhaozhiming/umi-build
执行命令: yarn build 就会报上面的错误
@xiaohuoni

@zhaozhiming 你这么配置不会生成 vendors 文件,所以引入错误。https://github.com/zhaozhiming/umi-build/pull/1

@xiaohuoni 谢谢。我是按照 umi 的文档把配置内容拷过来的(chunks),可能那个文档需要改下。

@xiaohuoni 同问,为什么minChunks改成1就可以了呢?

@xiaohuoni 谢谢。我是按照 umi 的文档把配置内容拷过来的(chunks),可能那个文档需要改下。

文档只是例子,这里要根据自己的需求拆包,才有配置它的必要。

@xiaohuoni 官方文档对splitChunks.minChunks的释义:

Minimum number of chunks that must share a module before splitting.

这有些简略了……

你看我这样理解对不对:

minChunks设为3表示,node_modules里的任意模块被不同的chunk引入大于等于3次,则将它们抽离成为一个单独的chunk,且该chunk名字叫vendors,否则不生成这个单独的chunk。

所以在一个比较小的repo(src下代码还很少)中,引用node_modules里的任意模块没有超过3次的话,就会报错找不到vendors这个chunk,因为它根本就没生成。此时将minChunks变为1,只要引用了1次就生成vendors chunk,就不会报错了。

如果我的理解有误,还望指正。

@xiaohuoni 官方文档对splitChunks.minChunks的释义:

Minimum number of chunks that must share a module before splitting.

这有些简略了……

你看我这样理解对不对:

minChunks设为3表示,node_modules里的任意模块被不同的chunk引入大于等于3次,则将它们抽离成为一个单独的chunk,且该chunk名字叫vendors,否则不生成这个单独的chunk。
所以在一个比较小的repo(src下代码还很少)中,引用node_modules里的任意模块没有超过3次的话,就会报错找不到vendors这个chunk,因为它根本就没生成。此时将minChunks变为1,只要引用了1次就生成vendors chunk,就不会报错了。

如果我的理解有误,还望指正。

@athrunsun 应该差不多是这个意思,但可能不是"引用node_modules里的任意模块没有超过3次",因为我有个项目超过3次了也报这个错。

遇到了这个问题

环境信息:

"umi": "^3.4.0"

刷了两遍官方文档后发现设置 splitChunks 的时候需要同时配置 dynamicImport 这个属性. 两者的联系还没有确定(没有研究大佬的源码). 但是配置上以后就不再报 chunk of vendors not found. 这个错误了 ~

dynamicImport api 传送门

具体原因还不知道是啥, 希望后来的大佬能给解惑一下.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

miaojinxing picture miaojinxing  ·  3Comments

zemzheng picture zemzheng  ·  3Comments

zhanchengkun picture zhanchengkun  ·  3Comments

afc163 picture afc163  ·  3Comments

ironyfive picture ironyfive  ·  3Comments