流星软件包动态导入失败,因为依赖弱

时间:2020-05-26 10:01:11

标签: meteor meteor-blaze dynamic-import meteor-packages

包裹

我有一个共享库,如Meteor包,结构如下:

ui
  - componentA.html
  - componentA.js
  - loader.js
  - ...
tools
  - toolXY.js
  - ...

,虽然tools在我的许多应用程序(和ui)中共享,但ui部分仅由一个应用程序使用。认为模板非常简单:

componentA.html

<template name="componentA">
  <span>yea component A</span>
</template>

componentA.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仅在一个应用程序中使用,所以我将templatingdynamic-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

并按如下所示在客户端上导入用户界面:

client / 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内的loader.js以及componentA.js会解析为Object { Template: Template(viewName, renderFunction) }(因为它已作为软件包安装到项目中)。

不是真正的修复程序

如果我关闭对templating的弱依赖关系,它将正常工作:

api.use('templating')

但是,这将导致我所有的应用程序都加载templating,尽管它们并不需要。

问题

为什么会这样?当依赖项已添加到项目中时,这不应该在弱依赖项下起作用吗?

0 个答案:

没有答案