包裹
我有一个共享库作为 Meteor 包,具有以下结构:
ui
- componentA.html
- componentA.js
- loader.js
- ...
tools
- toolXY.js
- ...
虽然tools
在我的许多应用程序(和 ui)之间共享,但该ui
部分仅由一个应用程序使用。考虑模板非常简单:
组件A.html
<template name="componentA">
<span>yea component A</span>
</template>
组件A.js
import { Template } from 'meteor/templating'
import { toolXY } from '../tools/toolXY'
import './componentA.html'
// ... template code
loader.js(小帮手,以为包有100个ui组件)
export const loader = {
componentA: {
template: 'componentA',
load: async function () {
return import('./componentA')
}
}
}
因为 ui 只在一个应用程序中使用,所以我做了templating
一个dynamic-import
弱依赖:
Package.onUse(function (api) {
api.versionsFrom('1.6')
api.use('ecmascript')
api.use('dynamic-import', ['client'], { weak: true })
api.use('templating', ['client'], { weak: true })
})
问题
我通过将我的包和弱依赖项添加到项目中
$ meteor add dynamic-import templating me:mypackage
并在客户端上导入 ui,如下所示:
客户端/main.js
import { loader } from 'meteor/me:mypackage/ui/loader'
Meteor.startup(() => {
loader.componentA.load()
.then(() => console.log('loaded'))
.catch(e => console.error(e))
})
这将导致以下错误:
Error: "Cannot find module './componentA.html'"
makeMissingError http://localhost:5050/packages/modules-runtime.js?hash=23fe92393aa44a7b01bb53a510a9cab5fb43037c:232
resolve http://localhost:5050/packages/modules-runtime.js?hash=23fe92393aa44a7b01bb53a510a9cab5fb43037c:238
moduleLink http://localhost:5050/packages/modules.js?hash=88e9e724ccc8459066fbe9e3889ef37c7bb7067f:353
module /node_modules/meteor/me:mypackage/ui/componentA.js:16
makeModuleFunction http://localhost:5050/packages/dynamic-import.js?hash=cf582bcc349503492678c9fd3f7bba4a610f70e5:138
fileEvaluate http://localhost:5050/packages/modules-runtime.js?hash=23fe92393aa44a7b01bb53a510a9cab5fb43037c:346
require http://localhost:5050/packages/modules-runtime.js?hash=23fe92393aa44a7b01bb53a510a9cab5fb43037c:248
moduleLink http://localhost:5050/packages/modules.js?hash=88e9e724ccc8459066fbe9e3889ef37c7bb7067f:360
getNamespace http://localhost:5050/packages/dynamic-import.js?hash=cf582bcc349503492678c9fd3f7bba4a610f70e5:187
dynamicImport http://localhost:5050/packages/dynamic-import.js?hash=cf582bcc349503492678c9fd3f7bba4a610f70e5:40
检查Package.templating
inside loader.js
,以及componentA.js
解析为Object { Template: Template(viewName, renderFunction) }
(因为它已作为包安装到项目中)。
不是真正修复的修复
如果我关闭templating
对它的弱依赖将正常工作:
api.use('templating')
然而,这将导致我所有的应用程序加载templating
,尽管它们不需要它。
问题
为什么会这样?当依赖项已添加到项目中时,这不应该适用于弱依赖项吗?