我在lerna管理的monorepo中使用汇总功能构建打字稿包时遇到问题。
lerna ERR! rollup --config ../../rollup.config.js stderr:
loaded ../../rollup.config.js with warnings
(!) Unused external imports
terser imported from external module 'rollup-plugin-terser' but never used
index.ts → dist/esm...
[!] Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
../mokui-base/component.ts (3:7)
1: const root = Symbol("root");
2:
3: export type Component<T extends object = {}> = T & {
^
4: [root]: Element;
5: attach(element: Element): Component<T>;
Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
at error (/****/****/code/js/mokui/node_modules/rollup/dist/rollup.js:5351:30)
at Module.error (/****/****/code/js/mokui/node_modules/rollup/dist/rollup.js:9643:9)
at tryParse (/****/****/code/js/mokui/node_modules/rollup/dist/rollup.js:9552:16)
at Module.setSource (/****/****/code/js/mokui/node_modules/rollup/dist/rollup.js:9868:33)
at Promise.resolve.catch.then.then.then (/****/****/code/js/mokui/node_modules/rollup/dist/rollup.js:12148:20)
lerna ERR! rollup --config ../../rollup.config.js exited 1 in '@moki.codes/mokui-header'
错误指向“导出类型”标记,这很好...令人困惑,我不确定打字稿怎么不理解自己的构造。
通过克隆repository并运行yarn build:packages
,将能够重现错误。@master分支。
有趣的是,定义mokui-base
的Component
包本身就可以很好地构建,仅当像我在mokui-header
内部一样依赖它时,才会在构建上产生上述错误。通过添加可复制
if (process.env.LERNA_PACKAGE_NAME === "@moki.codes/mokui-header")
process.exit(0);
在rollup.config.js
的顶部并运行yarn build:packages
。
我还有另一个构建目标“ dev”,可以尝试从yarn build:dev
构建并在stories/index.ts
服务的localhost:3000
。与这个问题有关,因为mokui-header
Header
的构建取决于mokui-base
Component
,在Header
中使用了index.ts
工厂,并且没有错误,可以按预期运行并提供定义的行为。
我的第一个直觉是选择退出cjs构建,因为那是两个构建之间的主要区别(build:packages和build:dev),但这没有任何区别,因此留下了@organization/package
解析问题我猜,我不确定...不是那样的话,我不知道从那里去。在export
源内部的export type Component =...
处删除component.ts
可以消除该错误,但是,这当然会在mokui-header
HeaderComponent
内部产生新的错误,抱怨Component is a value but used as type
,因为……没有[ C0]输入export即可使用。
是的,如果您有任何想法,我应该从这里去哪里,或者确切地知道我应该如何构建打字稿包,这取决于另一个兄弟姐妹,请分享。
很抱歉,如果我不礼貌,但是不建议我选择退出自定义版本并使用预配置的样板或类似的东西。
提前感谢!
如果有人遇到相同的问题,下面我提供解决方案:
[当一个人尝试在monorepo中构建每个单独的软件包时,汇总尝试解析Component
并将其包括在构建中。您不希望这样,因此在构建每个程序包时要避免它,因为我正在解析@organization/package-name
,提取package.json
字段的键,然后在dependencies
内部进行检查,可以在内部汇总配置的callback
字段中提供。这将产生所需的结果。
external