Импорт пакетов Meteor Dynami c завершается ошибкой с использованием шаблонов как слабой зависимости - PullRequest
3 голосов
/ 26 мая 2020

Пакет

У меня есть общая библиотека в виде пакета Meteor со следующей структурой:

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

и в то время как tools совместно используются многими моими приложениями (и пользовательским интерфейсом) , часть 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

загрузчик. js (маленький помощник, думаю, в пакете 100 компонентов пользовательского интерфейса)

export const loader = {
  componentA: {
    template: 'componentA',
    load: async function () {
      return import('./componentA')
    }
  }
}

Поскольку пользовательский интерфейс используется только в одном приложении, я сделал 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

и импортирую пользовательский интерфейс на клиенте выглядит следующим образом:

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, хотя они не требуют я t.

Вопрос

Почему он так себя ведет? Разве это не должно работать со слабой зависимостью, когда зависимость добавлена ​​в проект?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...