Подтвердить что ты не робот

Как использовать сторонние пакеты 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)
4b9b3361

Ответ 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 довольно далеки от прямого или самостоятельного объяснения.

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

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

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

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

К сожалению, я не получил пакет 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.