【问题标题】:How can I bundle JavaScript files under /vendor in an ember-cli project?如何在 ember-cli 项目的 /vendor 下捆绑 JavaScript 文件?
【发布时间】:2016-04-12 23:45:59
【问题描述】:

假设我在使用最新的ember-cli(在撰写本文时为 2.4.3)构建的 EmberJS 项目中的 /vendor 目录下有一个 ES6 库“foo”。假设 foo 是一个包含多个文件的库,例如bar.jsbaz.js 等,它们都导出了一些东西。

我想将vendor/foo/bar.jsvendor/foo/baz.js 等打包成一个分发文件,例如vendor/foo/dist/foo-bundle.js 然后我可以将其导入 Ember:

app.import("vendor/foo/dist/foo-bundle.js");

这看起来应该可以使用捆绑器和/或转译器(如Babel),但我不清楚我应该使用哪些工具以及以何种组合使用。 Ember 是否有内置工具可以通过 ember-cli 执行我想要的操作(如果有,我一定是盲人)?我应该使用像webpackbrowserifyrollup 这样的外部捆绑程序吗?

一般来说,JavaScript 工具似乎有很多噪音,这让我很难理解我有哪些选择来解决这个问题以及如何正确利用它们。任何帮助将不胜感激。


一些可能有用的注释...

到目前为止,我已经尝试了一些方法:

我尝试只导入main.js 文件,希望EmberJS 也能遍历依赖关系树并导入import 语句中引用的任何其他文件。这仅导入了main.js 文件,没有其他依赖项。

我查看了 broccoli-es6modules 并在运行时出错,但它也使用了 esperanto,它已被弃用以支持汇总。

我也尝试过直接使用 rollup,取得了一定程度的成功,但我的 bundle.js 输出经常是空的,并且不包含来自 bar.jsbaz.js 的代码,因为我只导入了它们在入口点(例如main.js):

main.js
-------
import bar from './bar.js';
import baz from './baz.js';

bar.js
------
export default function bar() {
  ...
}

baz.js
------
export default function baz() {
   ...
}

我发现如果我的main.js 包含一个从barbaz 调用代码的函数,我得到的不仅仅是一个空包,但如果 foo 只是来自第三方供应商的脚本集合没有“应用程序入口点”,除了类似于清单文件之类的东西,对于我正在寻找的东西,汇总似乎是错误的选择。

再次感谢!

【问题讨论】:

    标签: javascript ember.js ember-cli babeljs rollupjs


    【解决方案1】:

    (使用最新选项更新。)

    有几个选项。

    1. 如果baz.jsbar.js 是您自己的模块和代码,最好将它们放在app/my-awesome-module 文件夹中。您可以使用 ES6 导入在您想使用它们的其他地方导入。 Ember CLI 将自动转换、连接和缩小它们。

    2. 如果您想使用第 3 方模块或解决方案,请查看 http://emberobserver.com,大多数流行的库已经转换为 Ember 插件,因此您可以使用 ember install 安装它们。

    3. 在您的项目中使用 ember-auto-import 并将库作为普通 ES6 模块导入,如下所示:import MyCoolModule from "my-cool-module";

    【讨论】:

    • 啊,好的。因此,如果出于某种原因我有多个源文件是我自己的或非分发的第三方(即在 bower 或 npm 包中不可用),最好的办法是将它们直接导入到 /app 下的应用程序或创建一个包裹它们的附加组件 那么/vendor 有什么意义呢?是遗产吗?
    • 其实你是对的。当/vendor 是最好的地方时,仍然存在一些边缘情况。如果您无法从您的内部私有项目创建包(但是,如果可以的话,这是最好的),供应商仍然是合法的。你的包是 ES6 模块还是 ES5 vanilla js?
    • 这个问题实际上更多地源于学术上的好奇心,而不是现在的实际需要。我正在尝试使用 EmberJS,并试图了解以尽可能紧凑的形式将代码放入应用程序的所有可能方法,并发现/vendor 下的模块化 ES6 库的假设情况特别令人困惑——尤其是它确实如此(或不)与vendor.js 文件有关。据我所知,将需要转译和转译(反之亦然)的代码实际上放入vendors.js 文件中有点……困难。
    • (我正在用 Ember.js 构建我的主项目,因此欢迎任何学术好奇心。:) 我使用 Ember.js 已经超过 4 年了,我真的不记得了使用该供应商文件夹。它就像遗产一样存在。您的大部分外部依赖项可以添加为 bower/npm/ember 包...来自 ember-cli 网站:vendor/ - vendor specific files, such as stylesheets, fonts, external libs etc.,因此他们建议作为复杂代码的占位符...并且可能已经编译了供应商包,缩小等...
    • 太棒了!谢谢,我去看看。
    猜你喜欢
    • 2017-12-05
    • 2018-03-16
    • 2013-11-02
    • 2015-07-03
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2019-04-16
    • 2020-08-21
    相关资源
    最近更新 更多