如何安装Supergroup.js作为Ember-cli依赖项

时间:2015-08-10 16:03:42

标签: ember.js ember-cli

我想在ember-cli中使用Supergroup.js(我使用ember-cli:0.2.7ember 1.12.1)。 Supergroup是作为Underscore或LoDash mixin实现的,因此作者建议首先包含lodash依赖。

将依赖项添加到bower.json后:

//bower.json
"dependencies": {
  //...
  "lodash": "^3.9.3",
  "supergroup":"1.0.13"
}

我收到了错误:

Could not find module lodash
// at supergroup.js:  "_ = require('lodash');"

作为一种解决方法,我分叉supergroup,从supergroup.js删除了以下代码片段:

// if (typeof require !== "undefined") {
//     if (typeof underscore !== "undefined" && underscore === "underscore") {
//         var _ = require('underscore');
//     } else {
//         var _ = require('lodash');
//     }
// }

并且有效。

我不太了解ember-cli依赖关系是如何工作的,所以我想了解发生了什么以及在没有暴力的情况下安装Supergroup.js的正确方法强制修补,在dependencies中添加bower.json(或可能在package.json中)

2 个答案:

答案 0 :(得分:1)

您不必在 bower.json 中包含lodash,它已被指定为超级组中的依赖项。所有作者的意思(我假设)是,就javascript而言,它应首先被包括在内。

这实际上是一个比我想象的复杂得多的问题。基本上 supergroup.js 会尝试确定它是否与AMD模块一起使用,或者不使用您注释掉的代码。

ember-cli通过babel将ES6模块转换为AMD模块。因此,当加载supergroup.js时,它会检测到require,因此期望lodash可用。它不是!

因为ember-cli目前无法处理被称为匿名AMD模块的东西:

define([], function() {
    return lib;
});

当lodash弄清楚它所处的环境以及如何暴露自己时,它会做什么。

我试图强迫lodash以supergroup.js可以获取的格式提供自己,但我不认为它现在可以在不改变ember-cli,lodash或supergroup的情况下实现。 JS。我真的建议你现在只使用你编辑的版本。导致这种情况的各种相关问题。

参考文献:

答案 1 :(得分:1)

看起来它适用于ember-browserfy

 npm install --save-dev lodash
 npm install --save-dev supergroup

 //where needed
 import _ from 'npm:supergroup';

bower.jsonBrocfile.js.jshintrc中没有任何内容!