Npm 奥雷利亚外部资源

Npm 奥雷利亚外部资源,npm,resources,structure,aurelia,Npm,Resources,Structure,Aurelia,我正在寻找一种最好的方式来安排我的代码库,让不同项目之间共享公共资源。我有三个aurelia应用程序。在每一个文件夹中,我都在其资源文件夹中添加了一些资源(自定义元素、属性等)。当我需要一个已经在另一个项目中编写的文件时,我只是粘贴了它。现在我有时间进行重构,我想将所有这些资源移动到一个专用的存储库中。然后我希望能够在每个项目中只挑选我需要的资源 我试着把我所有的资源放在一个repo中,并从aurelia skeleton中获取一个构建任务,这个任务允许我构建我所有模块的AMD模块。然后,通过将

我正在寻找一种最好的方式来安排我的代码库,让不同项目之间共享公共资源。我有三个aurelia应用程序。在每一个文件夹中,我都在其资源文件夹中添加了一些资源(自定义元素、属性等)。当我需要一个已经在另一个项目中编写的文件时,我只是粘贴了它。现在我有时间进行重构,我想将所有这些资源移动到一个专用的存储库中。然后我希望能够在每个项目中只挑选我需要的资源

我试着把我所有的资源放在一个repo中,并从aurelia skeleton中获取一个构建任务,这个任务允许我构建我所有模块的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"
  ]
}
它的工作原理类似于charme,但对于从相对路径导入模块的值转换器来说,它失败了。 文件位于:

“projectRoot/node_modules/SHG aurelia resources/dist/amd/resources/value converters/duration format.js”, 它从“../utils./strings”导入

我在运行时遇到以下错误:

错误:eNote:没有这样的文件或目录,请打开 “/Users/hadrien/Documents/dev/SportHeroes/united heroes/src/resources/utils/strings.js”

奇怪的是,当我需要一个模板中的相对模块时(就像在我的进度按钮自定义属性中),就没有问题了

我不想做插件,因为我不想加载我的repo的每个模块。如果可能的话,我希望能够设置.feature
('../node\u modules/path/resources')
,并像加载本地资源一样加载它们


我该怎么办?

我正在回答上面评论中重新表述的问题

如果您有一个npm包,您可以使用
require
元素简单地从中获取资源。这个npm包可以将自身打包为插件,您只需选择不以这种方式加载它,因为您只需要它提供的东西的一个子集

我创建了一组示例项目来展示这一点:

此应用程序依赖于

这个依赖项将自身打包为一个插件,但也可以像我在应用程序中所做的那样,通过只使用插件拥有的两种资源中的一种来零碎地使用它。请注意,其他资源没有加载,因为我没有使用它

这是当我从依赖项中拉入资源时,应用程序中的情况:

<template>
  <require from="sample-resources-so41961759/custom-elements/my-echo"></require>
  <h1>${message}</h1>

  <my-echo say="Echo!"></my-echo>
</template>

${message}

为什么不想使用插件?插件和功能的API基本相同。您已经通过NPM包分发了资源,所以正确的方法是通过插件API。因为我不想加载每个模块。假设我的外部资源中有10个模块。应用程序A使用10,我可以使用插件。但是应用程序B只使用两个模块,我只想加载这两个。你不必在使用插件时“加载每个模块”。是吗?如何选择要加载的模块?请给我一点时间,我会写一个答案。:-)好的,但是我必须为每个模块创建任何新的存储库,所以。我曾计划将它们全部放在一个存储库中……我发布的存储库中有两个资源。你可以在回购中放入任意数量的资源。好的,但是如果我的应用程序只需要
MyEcho
,我会加载插件,如果我不使用它,它也会在供应商捆绑事件中添加
MyShow
。如果我不想让我的资源全球化?如果我想从包名的相对路径(如
sample-resources-so41961759/custom elements/my echo
)中要求/导入它们,那么您必须设置树摇动并学习webpack或其他内容,最有可能。我想要一些关于这方面的信息;)