Эмбер, почему мы должны использовать импорт для определенных зависимостей - PullRequest
0 голосов
/ 06 октября 2018

В приложении Ember при использовании определенных зависимостей, таких как момент, установленный через bower, мы также должны импортировать их в файл ember-cli-build.js:

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

Мой вопрос: почемуэто необходимо, поскольку я предполагаю, что все внутри node_modules, а также bower_components должно быть доступно для использования внутри приложения.Кроме того, если это не так, как мы можем определить, какие зависимости потребуют такого явного импорта, чтобы иметь возможность их использовать?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

На самом деле: (почти) все!

Ember по умолчанию не добавляет что-либо в ваше приложение, кроме добавления тлеющих углей.Однако есть некоторые дополнения, которые динамически добавляют материал в ваше приложение, например ember-browserify или ember-auto-import .

Также только потому, что вы делаете app.import this не означает, что вы можете использовать код с import ... from 'my-package'.Единственное, что делает app.import, это добавляет указанный файл в ваш файл vendor.js.Отмечая другое.

Способ использования этой зависимости полностью зависит от предоставленного файла JS!Ember использует loader.js, загрузчик модулей AMD.Так что если файл JS, который вы app.import ed использует AMD (или UMD), это сработает, и вы сможете import Foo from 'my-package'.(Потому что это на самом деле переносится в импорт AMD)

Если предоставленный файл JS предоставляет глобальный, вы можете просто использовать глобальный.Однако существует также концепция vendor-shim s. .По сути, это всего лишь крошечный модуль AMD, который вы можете написать, чтобы экспортировать глобальный модуль AMD.

Однако есть много расширений, которые добавляют материал в ваше приложение.Например, такие вещи, как ember-cli-moment-shim просто существуют, чтобы автоматически добавить зависимость к вашему проекту.Однако как это полностью зависит от аддона.


Итак, правило таково:

  • Если его аддон ember читайте документы аддона, но обычновам не следует app.import
  • В любом другом случае вам нужно вручную использовать библиотеку либо с помощью app.import, либо с помощью ручных преобразований брокколи.

Единственное исключение - если вы используетеаддон, который пытается в общем случае добавить зависимости в ваш проект, например ember-browserify или ember-auto-import

0 голосов
/ 08 октября 2018

На самом деле вам не нужно.

Теперь есть пакет, который позволяет «просто импортировать» вещи: https://github.com/ef4/ember-auto-import

Некоторое чтение по теме импорта: https://discuss.emberjs.com/t/readers-questions-how-far-are-we-from-being-able-to-just-use-any-npm-package-via-the-import-statement/14462?u=nullvoxpopuli

Подробный ответ на ваш вопрос и причины, почему все так, как они есть, размещен здесь: https://discuss.emberjs.com/t/readers-questions-why-does-ember-use-broccoli-and-how-is-it-different-from-webpack-rollup-parcel/15384?u=nullvoxpopuli (Слишком длинный для переполнения стека, в том числе и на мобильном телефоне,и я не хотел бы потерять все ссылки и ссылки в копировальной пасте)

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

Редактировать:

Чтобы ответить:

Я просто хотел понять, «в каких случаях» нам нужно использовать оператор import в нашей ember-cli-build (то есть мы не импортируем все зависимости, которые есть в нашем пакете / bower.json)... Но только для конкретных ... Я хотел знать, каковы критерии или варианты использования для импорта.

Как правило, для каждой упаковки, поэтому привлекательность автоматического импорта и/ или упаковщики (где в будущем вместо свертки может быть использован веб-пакет).

Хотя, этоОбычно ember-addon определяет свои собственные app.import, так что вам не нужно его настраивать, например любой из этих прокладок , в частности, вот как библиотека диаграмм c3 подкладывается: https://github.com/mike-north/ember-c3-shim/blob/master/index.js#L7

Импортировать все «вручную», как это, немного неудобно, но отчасти из-за того, что пакеты js не имеют согласованного формата распространения.Есть комбинированные команды umd, amd, cjs, es6 и т. Д., И нам нужно вручную указать, какой формат файла.У подхода «свертка + брокколи» есть некоторые большие преимущества, которые можно продемонстрировать здесь и здесь

Иногда, в зависимости от преобразования, вам понадобится "продавец-регулировочная шайба».Это удобно, когда модуль решил, что он хочет быть доступным в окне / глобальном объекте, а не в качестве экспорта модуля.Ссылка: https://simplabs.com/blog/2017/02/13/npm-libs-in-ember-cli.html (self представляет окно / глобальное)

однако, webpack уже проделал работу, выясняя, как определить, в каком формате находится файл js, и абстрагирует все этоот вас.epack-auto-import использует webpack и позволяет просто import { stuff} from 'package-name';.Недостатком webpack является то, что вы не можете передавать свои преобразования (что большинству людей может и не понадобиться, но это может пригодиться, если вы делаете Typescript -> Babel -> es5).

...