如何在ember-cli插件组件中找到npm模块

时间:2015-07-27 02:27:40

标签: javascript ember.js npm ember-cli

我使用ember-browserify在我的ember-cli应用程序中查找npm模块,但由于某种原因它不适用于ember-cli插件。

所以我的问题是:有没有其他方法可以将npm模块导入到ember-cli插件中?

编辑:

所以我无法导入npm模块,但是我发现我想要导入的特定模块也是一个bower组件,所以我安装它然后通过index.js导入它就像这样:

included: function(app) {
  this._super.included(app);

  app.import('bower_components/dropzone/dist/dropzone.js');
}

这很有效。无法使用node_modules执行此操作。很难将npm模块导入到ember-cli插件中。

2 个答案:

答案 0 :(得分:4)

ember-fetch就是这样做的。代码有点复杂:

treeForVendor: function(tree) {

  // Get the path of whatwg-fetch in node modules
  var fetchPath = require.resolve('whatwg-fetch');

  // use utility function to expand it into a pattern
  var expandedFetchPath = expand(fetchPath);

  // rename all the files in a tree containing files matching the pattern
  var fetch = rename(find(expandedFetchPath), function(path) {
    return 'whatwg-fetch/fetch.js'
  });

  // apply a template to each file in the tree and merge the trees
  return mergeTrees([
    new Template(fetch, templatePath, function variables(content) {
      return {
        moduleBody: content
      };
    })
  ]);
},

included: function(app) {
  this.app = app;
  this._super.included(app);

  // import the tree created above in treeForVendor
  app.import('vendor/whatwg-fetch/fetch.js', {
    exports: {
      default: [
        'default',
        'Headers',
        'Request',
        'Response'
      ]
    }
  });
}

取自https://github.com/stefanpenner/ember-fetch/blob/master/index.js

希望这有帮助。

答案 1 :(得分:1)

在插件中,将导入添加到对象的app/版本(这通常只是导出对象)。

在使用插件的应用中,安装ember-browserify和npm模块。

例如,在插件的app/models/user.js中:

import TimezoneDetect from 'npm:jstimezonedetect';

export { default } from 'common/models/user';

请参阅 https://github.com/ef4/ember-browserify#using-ember-browserify-in-addons