我对在 ember-cli 中导入依赖项感到困惑,尤其是关于标准 AMD 案例,如 official Ember Cli document 中所述.该文档没有提供太多示例,在我看来它假设读者对 AMD 有很好的了解,但我并非如此。我的直接用例是 import math.js。不幸的是,official document of math.js不提供有关使用 Ember Cli 导入的示例。然后,我找到了this post有相对清晰的例子,特别是下面的例子似乎很相关。
app.import({
development: 'vendor/lodash/dist/lodash.js',
production: 'vendor/lodash/dist/lodash.min.js'
}, {
'lodash': [
'default'
]
});
然后,我用 math.js 做了类似的事情,如下所示:
app.import({
development: 'bower_components/mathjs/dist/math.js',
production: 'bower_components/mathjs/dist/math.min.js'
}, {
'mathjs': [
'default'
]
});
但是,它不起作用。当我尝试将它与
一起使用时import mathjs from 'mathjs'
我遇到了一个错误。最终,我使用了以下解决方案:
// Brocfile.js
app.import('bower_components/mathjs/dist/math.min.js');
// some controller.js
var math = window.math
虽然上述解决方案有效,但我不喜欢它,因为它可能会发生名称冲突。此外,根据 math.js 的文档,在我看来它应该支持标准的 AMD 类型的导入。
所以,我的问题如下。
1. 在上面的lodash
例子中,'default'
是什么意思?这是对相应模块中导出的任何内容的一般引用吗?如何判断我是否可以通用使用它(例如,math.js)?
2. 如果一个模块支持require.js,那么它是一个标准的AMD模块是真的吗?如果是这样,给出如下代码:
require.config({
paths: {
mathjs: 'path/to/mathjs',
}
});
require(['mathjs'], function (math) {
// use math.js
math.sqrt(-4); // 2i
});
如何将它映射到 Ember Cli 代码?
最佳答案
这有点麻烦,但由于 mathjs 不公开/支持命名的 AMD 模块,您不能在 app.import
中使用额外的语法。
你有两个选择:
- ember-browserify (如果库支持 CommonJS——mathjs 支持)
- 自己“填充”依赖库
1。 Ember 浏览器
安装 ember-browserify
ember 安装 ember-browserify
将 CommonJS 库安装为 NPM 包
npm install --save-dev mathjs
使用带有常规
import
语法的 NPM 包从 'npm:mathjs' 导入 mathjs;
2。匀场
您需要做的是“填充”库,以通过import
语句使其可用。我还是不知道shim这个词是什么意思<:
如果您有兴趣创建一个 bower 包,例如ember-cli-mathjs-shim
然后您可以使用它并让其他人也可以使用它。这方面的一些例子是:
但如果您不愿意这样做,我建议您将以下内容添加到您的项目中:
vendor/shims/math.js
- 在 vendor
下创建一个 shims
文件夹(vendor 是你依赖的地方来自 NPM 或 Bower - Brocfile 似乎无法从除此处以外的任何地方 app.import
- 例如 app/shims
或简单的 shims
在根级别不起作用)
vendor/shims/math.js
(function() {
/* globals define, math */
function mathJSModule() {
'use strict';
return { 'default': math };
}
define('mathjs', [], mathJSModule);
})();
Brocfile.js
app.import('bower_components/mathjs/dist/math.js');
app.import('vendor/shims/math.js', {
exports: {
'mathjs': [ 'default' ]
}
});
这里的顺序很重要。
关于javascript - 在 ember-cli 中导入依赖项(例如,导入 math.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30443351/