Как найти модуль npm внутри компонента addber-компонента ember-cli

Я использовал ember-browserify для поиска модулей npm в своих приложениях ember-cli, но по какой-то причине он не работает для админов ember-cli.

Итак, мой вопрос: есть ли другой способ импортировать модули npm в аддон ember-cli?

Edit:

Поэтому я не смог импортировать модуль npm, но я обнаружил, что конкретный модуль, который я хотел импортировать, также является компонентом bower, поэтому я установил его как таковой и импортировал его через index.js следующим образом:

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

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

и это сработало. Выполнение этого с помощью node_modules было невозможно. Это отстой, что так сложно импортировать модули npm в админ ember-cli.

Ответы

Ответ 1

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

Надеюсь, что это поможет.

Ответ 2

В аддоне добавьте импорт в app/ версию объекта (обычно это просто экспортирует объект).

В приложениях, которые используют аддон, установите оба ember-браузера и модуль 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