Как использовать сторонние пакеты 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 довольно далеко от прямого или самостоятельного объяснения.
ресурсы, которые привели меня к моему рабочим решением были:
- как использовать сторонний javascript из ember-cli route
- https://github.com/stefanpenner/ember-cli/issues/757
следующие шаги, которые я предпринял, чтобы заставить его работать:
- я вручную загрузил библиотеку 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 сразу без потребности аддонов или завертчиц:
к сожалению, документация по-прежнему на работе и не говорится, что модули 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
я предпочитаю и использую этот способ, потому что он избегает глобальных переменных и следует за 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
путь, описанный на Эмбер.документация 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 и пришлось сделать множество вещей, чтобы заставить его работать.
npm install ember-browserify --save-dev
npm install d3plus --save-dev
ember install ember-cli-coffeescript
npm install --save-dev coffeeify coffeescript
тогда в вашем компоненте сделайте
import d3plus from 'npm:d3plus';
долгое время я получал ошибки во время выполнения, когда он искал coffescript и подумал, что это будет полезно для людей, специально ищущих d3plus.