使用Ember-cli项目中的ES6库
Use ES6 library in Ember-cli project
我有一个使用Ember Cli的小型EmberJS应用程序。我的应用程序有一个私有的ES6库,它是一个bower依赖项。基本上,我想要的是导入库并在任何我想要的地方使用它。
如果我没有错,我应该在brocfile.js
中转换库,然后使用它。不幸的是,我不能提供太多具体的信息,但我会尽我所能做到更清楚。
我的外部库名为main-lib
,结构如下(它正在另一个项目中工作):
- bower_组件
- 主库
- api.js
- main.js
- message.js
- 主库
在main.js文件中,我有以下内容:
import Api from 'main/api';
import Message from 'main/message';
var main = {};
main.api = Api;
main.message = Message;
export default main;
因此,我想做的是,在我的应用程序中,导入main
并使用它所包含的不同函数。
例如,在某个emberjs控制器中:
import Main from 'main';
//use Main here
为此,我想在我的brocfile.js 中做以下操作
var tree = 'bower_components/main-lib';
var ES6Modules = require('broccoli-es6modules');
var amdFiles = new ES6Modules(tree, {
format: 'amd',
bundleOptions: {
entry: 'main.js',
name: 'mainLib'
}
});
然而,这毫无作用。基本上,我希望传输后的文件包含在vendor.js
中,或者可以通过导入来使用库的某个地方。
我在这里遗漏了一些东西,但我无法准确定位。
第1版:在我的brocfile.js:末尾添加这些行之后
mergeTrees = require('broccoli-merge-trees')
module.exports = mergeTrees([app.toTree(), amdFiles]);
我可以得到一个看起来像这样的ES5:
define(['main/api', 'main/message'], function(api, message) {
var main = {};
main.api = Api;
main.message = Message;
var _main = main;
return _main;
});
问题是它没有同时导入main/api
和main/message
。我必须为我想要的每个文件重复代码吗?
此外,该文件不是在vendor.js
中连接的,而是简单地连接在/dist
的根上
您有以下内容:import Api from 'main/api'
-但在您所解释的内容中,我没有看到一个名为main
的文件夹-只有一个称为main-lib
的文件夹。。。
会不会是main/api
和main/message
不包括在内,因为它们实际上并不存在?您可能需要在main.js
文件中使用main-lib/api
和main-lib/message
Broccoli与ember-cli的集成已经包括了一个transpiler,所以我认为这样的东西就足够了:
app.import('bower_components/main-lib/main.js', {
type: 'vendor',
exports: { 'main': ['default'] }
);
然后你可以:
import Main from 'main';
根据您当前Brocfile中的内容,您仍然需要合并amdFiles
(app.import
会为您完成此操作)。
类似于:
mergeTrees = require('broccoli-merge-trees')
module.exports = mergeTrees([app.toTree(), amdFiles]);
这些都没有经过测试,但你已经明白了。
Ember似乎提倡使用:https://www.npmjs.com/package/broccoli-es6modules
这意味着导入你的模块会看起来像:
var mergeTrees = require('broccoli-merge-trees');
var tree = './bower_components/main-lib';
var ES6Modules = require('broccoli-es6modules');
var amdFiles = new ES6Modules(tree, {
format: 'amd',
bundleOptions: {
entry: 'main.js',
name: 'main-lib'
}
});
module.exports = mergeTrees([app.toTree(), amdFiles])
- 使用Ember-cli项目中的ES6库
- 使用<img>Ember-cli中的src
- 阻止Ember CLI中的目录清理
- Ember cli Uncatch TypeError: undefined 不是函数
- Ember-cli-Mirage 重定向 socket.io 客户端,该客户端注入 Mirage 中
- 如何使用 express.js 和 ember-cli 实现节点.js后端服务器
- 如何在ember-cli项目中将JavaScript文件绑定到/vvendor下
- Ember.TEMPLATES is empty (ember-cli-htmlbars)
- 使用Ember CLI中模板内的ObjectController从模型中获取数据
- 使用自定义断言帮助程序对cli扩展assert进行ember-cli扩展
- Ember CLI and ASP.NET
- 如何通过 Ember-CLI 将 jStorage(或其他外部 JS 库)与 Ember 一起使用.js
- 如何使用 Ember-CLI 在 ArrayController 中获取 Ember-Data 值
- ember-cli:moduleFor 失败,并显示“尝试注册未知工厂”错误
- 如何在 Ember CLI 中使用 ES6 语法对 Ember 类进行子类化
- Ember cli 切换侧边栏“实现 Jquery 部分?”
- 在 ember-cli 中使用 ID 的路由
- 如何在 Ember-CLI 中单元测试类方法
- Ember CLI with http-mock and pretender, 如何管理模拟数据
- Ember CLI导入ES6文件到Ember - CLI -builds.js