【发布时间】:2017-06-17 03:16:19
【问题描述】:
我正在寻找最好的方式来安排我的代码库以及在不同项目之间共享的公共资源。我有三个 aurelia 应用程序。在每一个中,我在其资源文件夹中添加了一些资源(自定义元素、属性等)。当我需要一个已经在另一个项目中写过的东西时,我只是粘贴了它。现在我有时间重构,我想将所有这些资源移动到一个专用的存储库中。然后我希望能够在每个项目中只选择我需要的资源。
我已经尝试将我所有的资源放在一个 repo 中,其中包含 aurelia 骨架的 gulp 构建任务,它允许我构建我所有模块的 AMD 模块。然后,我可以通过将它们添加到 aurelia.json 来单独加载一些模块。以属性为例:
{
"name": "aurelia-resources-progress-button",
"path": "../node_modules/SHG-aurelia-resources/dist/amd/resources/attributes",
"main": "progress-button"
}
或自定义元素:
{
"name": "aurelia-resources-avatar-upload",
"path": "../node_modules/SHG-aurelia-resources/dist/amd/resources/elements/avatar-upload",
"main": "avatar-upload",
"resources": [
"avatar-upload.html",
"avatar-upload.css"
]
}
它就像一个魅力,但它对于从相对路径导入模块的值转换器失败。 文件位于:
"projectRoot/node_modules/SHG-aurelia-resources/dist/amd/resources/value-converters/duration-format.js", 它从'../utils./strings'导入
和
我在运行时收到以下错误:
“错误:ENOENT:没有这样的文件或目录,打开 '/Users/hadrien/Documents/dev/SportHeroes/united-heroes/src/resources/utils/strings.js'”。
奇怪的是,当我需要模板中的相关模块时(例如在我的进度按钮自定义属性中)没有问题。
我不想制作插件,因为我不想加载我的 repo 的每个模块。如果可能的话,我想要的是能够设置 .feature('../node_modules/path/resources') 并像加载本地资源一样加载它们。
我该怎么办?
【问题讨论】:
-
为什么不想使用插件?插件和功能的 API 几乎相同。您已经通过 NPM 包分发资源,因此正确的方法是通过插件 API。
-
因为我不想加载每个模块。想象一下,我的外部资源中有 10 个模块。 App A 使用 10,我可以使用插件。但是 App B 只使用了 2 个模块,我只想加载这两个。
-
使用插件时不必“加载每个模块”。
-
是吗?如何选择我要加载的模块?
-
给我一点时间,我会写一个答案。 :-)
标签: npm resources structure aurelia