Как использовать сторонние пакеты npm с приложением ember cli
РЕДАКТИРОВАТЬ: это фактически о любом пакете npm, который не предназначен для игры с ember. В моем случае я пытался заставить крипто-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';
бросает во время сборки
[email protected]:~/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)
Ответы
Ответ 1
Самый простой и рекомендуемый ответ - использовать ember-browserify
. (поскольку поддержка пакетов bower будет удалена в будущем.)
Это пример использования пакета npm dexie
в приложении Ember CLI.
Установите браузеру: npm install ember-browserify --save-dev
Установите dexie (или любой другой модуль, который вам нужен): npm install dexie --save-dev
Импортируйте модуль следующим образом: import Dexie from 'npm:dexie';
Ответ 2
ОБНОВЛЕНИЕ: Я получил это, чтобы работать намного лучше и прямо вперед! Благодаря комментарию @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! Пока я не нашел документацию... sweet: http://bower.io/docs/api/#install
OLD-подход
Я получил это, чтобы работать, но я не могу сказать, насколько хорошенький или правильный подход. В том числе сторонние пакеты или библиотеки с ember cli довольно далеки от прямого или самостоятельного объяснения.
Источники, которые привели меня к моему рабочему решению, были:
Следующие шаги я предпринял, чтобы заставить его работать:
Затем работала сборка, и я мог в конечном итоге использовать библиотеку.
К сожалению, я не получил пакет npm! Мне пришлось вручную загрузить zip файл, разархивировать его и перенести в нужное место, и если версия изменится, это не под любым контролем версий/зависимостей... Я не буду отмечать это как ответ, так как он меня не удовлетворяет на всех, но по крайней мере я хотел поделиться тем, что я сделал, чтобы заставить его работать для меня.
Ответ 3
Как описывает Тимм, использование браузера - это код, введенный в ваше приложение ember. Тем не менее, у меня была проблема с использованием вложенного модуля. Для этого мне пришлось создать модуль с New
, прежде чем я смогу его использовать:
Чтобы импортировать модуль NPM.
1) установить браузеру:
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.);
Ответ 4
хотя это старый поток, который я бы внес, поскольку я потратил некоторое время на это. Конкретный пакет, который я пытался связать с ember, был "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';
В течение долгого времени я получал ошибки времени выполнения, когда он искал кофейный столб, и решил, что это будет полезно для людей, которые специально ищут d3plus.