Как использовать сторонние пакеты npm с приложением ember cli

EDIT: это на самом деле о любом пакете npm, который не предназначен для игры вместе с ember. В моем случае я попытался заставить crypto-js работать, но, похоже, всегда одна и та же проблема с любым пакетом npm, не специально разработанным для ember cli.

Я хочу использовать cryptoJS в моем приложении ember, которое я в настоящее время рефакторингую с помощью ember cli, но у меня много проблем с импортом всех сторонних пакетов и библиотек, которые я уже использую, например например cryptoJS.

CryptoJS по крайней мере имеет пакет для npm, я даже не хочу думать о том, что произойдет, если некоторые из моих включенных библиотек не имеют пакета...

мне просто не хватает точки в документации ember-cli или это действительно не описано, как импортировать другие пакеты npm, а также Как правильно включать библиотеки без пакетов, чтобы держать их под контролем версий и контролем зависимостей?

если я буду следовать описанию crypto - JS руководство по упаковке:

var CryptoJS = require("crypto-js");
console.log(CryptoJS.HmacSHA1("Message", "Key"));

я получаю и ошибку в моем ember build

utils/customauthorizer.js: line 1, col 16, 'require' is not defined.

Спасибо за любую помощь в этом, я очень взволнован проектом ember cli, но импорт моего существующего приложения ember был довольно болезненным до сих пор...

EDIT:

просто импорт, к сожалению, не работает.

import CryptoJS from 'crypto-js';

выбрасывает во время сборки

daily@dev1:~/VMD$ ember build
version: 0.1.2
Build failed.
File: vmd/utils/customauthorizer.js
ENOENT, no such file or directory '/home/daily/VMD/tmp/tree_merger-tmp_dest_dir-F7mfDQyP.tmp/crypto-js.js'
Error: ENOENT, no such file or directory '/home/daily/VMD/tmp/tree_merger-tmp_dest_dir-F7mfDQyP.tmp/crypto-js.js'
    at Error (native)
    at Object.fs.statSync (fs.js:721:18)
    at addModule (/home/daily/VMD/node_modules/ember-cli/node_modules/broccoli-es6-concatenator/index.js:84:46)
    at addModule (/home/daily/VMD/node_modules/ember-cli/node_modules/broccoli-es6-concatenator/index.js:133:9)
    at addModule (/home/daily/VMD/node_modules/ember-cli/node_modules/broccoli-es6-concatenator/index.js:133:9)
    at /home/daily/VMD/node_modules/ember-cli/node_modules/broccoli-es6-concatenator/index.js:59:7
    at $$$internal$$tryCatch (/home/daily/VMD/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:470:16)
    at $$$internal$$invokeCallback (/home/daily/VMD/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:482:17)
    at $$$internal$$publish (/home/daily/VMD/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:453:11)
    at $$rsvp$asap$$flush (/home/daily/VMD/node_modules/ember-cli/node_modules/rsvp/dist/rsvp.js:1531:9)

5 ответов


самый простой и рекомендуемый ответ-использовать ember-browserify. (as поддержка пакетов bower будет удалена в будущем.)

это пример использования пакета npm dexie в приложении Ember CLI.

установить browserify: npm install ember-browserify --save-dev

установите dexie (или любой модуль, который вам нужен):npm install dexie --save-dev

импортируйте модуль следующим образом:import Dexie from 'npm:dexie';


обновление: я получил это, чтобы работать намного лучше и прямо вперед! Благодаря комментарию @j_mcnally!

оставит первый ответ там, чтобы все могли видеть, какие проблемы я исходил от:)

что я сделал:

bower install crypto-js=svn+http://crypto-js.googlecode.com/svn/#~3.1.2 --save

в файле Brocfile.js Я мог бы просто сделать app.import('bower_components/crypto-js/build/rollups/hmac-md5.js');

нет ручной загрузки или перемещения файлов, просто управление зависимостью, намного лучше решение!

но, честно говоря, это было все еще много vodoo! Пока не нашел документы... сладкий: http://bower.io/docs/api/#install


старый подход

я получил это на работу, но я не могу сказать, насколько это красиво или правильно. Включая сторонние пакеты или библиотеки с ember cli довольно далеко от прямого или самостоятельного объяснения.

ресурсы, которые привели меня к моему рабочим решением были:

следующие шаги, которые я предпринял, чтобы заставить его работать:

  • я вручную загрузил библиотеку https://code.google.com/p/crypto-js/downloads/detail?name=CryptoJS%20v3.1.2.zip и расстегнул его
  • I вручную создал каталог в моем каталоге поставщика:mkdir vendor/crypto-js
  • я добавил app.import('vendor/crypto-js/hmac-md5.js'); до
  • добавил "CryptoJS" до "predef" ключ в

затем сборка работала, и я мог в конечном итоге использовать библиотеку.

к сожалению, я не получил пакет npm для работы! Мне пришлось вручную загрузить zip-файл, распаковать его и переместить в правильное место, и если версия изменится, она не находится под какой-либо версией / зависимостью управление... Я не буду отмечать это как ответ, так как это меня совсем не удовлетворяет, но, по крайней мере, я хотел поделиться тем, что я сделал, чтобы это сработало для меня.


как описывает Timm, использование browserify получает код, введенный в ваше приложение ember. Однако у меня возникли проблемы с использованием инъекционного модуля. Для этого мне пришлось фактически создать модуль с New прежде чем я смог его использовать:

для импорта модуля NPM.

1) установить browserify:

npm install ember-browserify --save-dev

2) установите свою модель:

npm install my-module --save-dev

3) импортируйте ваш модуль в ваш файл ember интерес (app / controller / post.в JS):

import Module from 'npm:my-module';

4) используйте модуль из вашего кода, создав модуль с New:

var output = new Module(var1, var2, etc.);


как заявил Морра Пабло на комментарий на сообщение simplabs "использование библиотек npm в Ember CLI", модули НПМ третьей стороны можно импортировать на Эмбер.js от версии 2.15 сразу без потребности аддонов или завертчиц:

https://www.emberjs.com/blog/2017/09/01/ember-2-15-released.html#toc_app-import-files-within-node_modules

к сожалению, документация по-прежнему на работе и не говорится, что модули npm можно импортировать, только bower и vendor:

https://github.com/emberjs/guides/issues/2017 https://guides.emberjs.com/v3.0.0/addons-and-dependencies/managing-dependencies/

я получил 2 решения для импорта сторонних модулей npm непосредственно на Ember.js из документация ember CLI об управлении зависимостями, хотя он также устарел и говорит, что npm модули не могут быть импортированы, только bower и vendor:

модуль npm как стандартный анонимный актив AMD

https://ember-cli.com/managing-dependencies#standard-anonymous-amd-asset

AMD: определение асинхронного модуля

я предпочитаю и использую этот способ, потому что он избегает глобальных переменных и следует за import съезд Тлеющий уголек.js.

ember-cli-build.js:

app.import('node_modules/ic-ajax/dist/amd/main.js', {
  using: [
    { transformation: 'amd', as: 'ic-ajax' }
  ]
});

amd - тип применяемого преобразования и ic-ajax - имя модуля, которое будет использоваться при импорте в файл javascript.

на Эмбер.JS javascript файл (маршрутизатор, компонент...):

import raw from 'ic-ajax';
// ...
icAjaxRaw( /* ... */ );

raw модуль, экспортируемых ic-ajax.

вот как это работало для меня, хотя документация Ember CLI показывает import другой не работал на меня, возможно, из-за конкретного пакета, который я импортировал:

import { raw as icAjaxRaw } from 'ic-ajax';
//...
icAjaxRaw( /* ... */ );

модуль npm как глобальная переменная

https://ember-cli.com/managing-dependencies#standard-non-amd-asset

ember-cli-build.js:

app.import('node_modules/moment/moment.js');

на Эмбер.JS javascript файл (маршрутизатор, компонент...):

/* global moment */
// No import for moment, it's a global called `moment`

// ...
var day = moment('Dec 25, 1995');

/* global moment */ это аннотация для ESLint не показывать ошибку при построении проекта, потому что moment() не определено в файле.

стандартный модуль npm с именем AMD Asset

https://ember-cli.com/managing-dependencies#standard-named-amd-asset

Ember CLI также показывает третий вариант, который не работал на меня, может быть, из-за конкретного пакета я был импорт:

ember-cli-build.js:

app.import('node_modules/ic-ajax/dist/named-amd/main.js');

на Эмбер.JS javascript файл (маршрутизатор, компонент...):

import { raw as icAjaxRaw } from 'ic-ajax';
//...
icAjaxRaw( /* ... */ );

модуль npm как модули AMD JavaScript

https://guides.emberjs.com/v3.0.0/addons-and-dependencies/managing-dependencies/#toc_amd-javascript-modules

путь, описанный на Эмбер.документация js об управлении зависимостями не работает для мне либо, возможно, из-за конкретного пакета, который я импортировал:

ember-cli-build.js:

app.import('node_modules/ic-ajax/dist/named-amd/main.js', {
  exports: {
    'ic-ajax': [
      'default',
      'defineFixture',
      'lookupFixture',
      'raw',
      'request'
    ]
  }
});

на Эмбер.JS javascript файл (маршрутизатор, компонент...):

import { raw as icAjaxRaw } from 'ic-ajax';
//...
icAjaxRaw( /* ... */ );

хотя это старая нить, я думал, что внесу свой вклад, поскольку я потратил некоторое время на это. Конкретный пакет я пытался ссылку на Эмбер 'd3plus и пришлось сделать множество вещей, чтобы заставить его работать.

  1. npm install ember-browserify --save-dev
  2. npm install d3plus --save-dev
  3. ember install ember-cli-coffeescript
  4. npm install --save-dev coffeeify coffeescript

тогда в вашем компоненте сделайте import d3plus from 'npm:d3plus';

долгое время я получал ошибки во время выполнения, когда он искал coffescript и подумал, что это будет полезно для людей, специально ищущих d3plus.