是否可以创建私有或内部 ember.js 插件?

Is it possible to create a private or internal ember.js addon?

我的用例

我在一家使用 Ember.js 维护多个(如 7 或 8 个)不同网站的公司工作。这些站点中的大多数在顶部都有一个几乎相同的导航栏。极少的更改是可以像组件或附加组件一样轻松输入的内容。为了增加我们代码的模块化,我认为将我们的大部分导航条码导入一个插件并在我们所有的网站上使用它会非常酷。

但是,这种方法的一个问题是我们的导航栏过于内部化,无法将其作为 public 附加组件发布(只有我的公司需要使用它)。所以我宁愿不 post 它作为 public 附加组件。

这是 Ember 插件的可能用例吗?如果是这样,我们如何考虑实施它。

我过去曾成功使用过以下方法:

  1. 创建你的插件
  2. 在全局 node_modules 文件夹中创建符号链接 (cd /your-addon-folder && npm link)
  3. 转到网站项目并在那里创建一个符号链接 (cd /your-homepage && npm link your-addon-package-name)
  4. 使用你的插件

这发生在您本地的机器上,您的插件既不会发布到 npmjs.com 注册表也不会从中使用。

为了安全起见,您可以在插件的 package.json 中使用 private 标志,同时将其设为未授权:

...
"private": true,
"license": "UNLICENSED",
...

这是 Yarn Workspaces. They allow you to create a local package that is shared amongst all the apps in the workspace. These are very usable with Ember.js and Lenny Burdette gave a talk about them 在去年 Ember SF 聚会上的一个重要用例。如果您同时构建了很多应用程序,这也是使您的依赖项版本在应用程序之间保持同步的好方法。

如果您的所有网站都在一个公共项目下,您可以考虑将导航或所有公共组件创建为 in-repo-addon,这将达到私有化的目的并充当插件。要创建一个 in-repo-addon,您可以使用以下命令

ember g in-repo-addon <private-addon-name>

# To create a component inside the addon, use:

ember g component <component-name> -ir <private-addon-name>

# Instead of '-ir', you could also use '--in-repo-addon'
# Also 'g' in the above commands = 'generate'

运行 上述命令将创建一个 lib/<private-addon-name> 文件夹,您可以在该文件夹下使用组件、公共资源等

参考:https://ember-cli.com/extending/#in-repo-addons

您可以发布到私有 npm 注册表。您可以使用 npmjs orgs,但是有各种软件(有些是免费的)可以做到这一点。