Угловой Cli Webpack, как добавить или связать внешние файлы js?
Я не уверен, как включить JS-файлы (поставщики) после переключения углового Cli из SystemJs в Webpack.
Вариант A
у меня есть некоторые файлы js, которые были установлены через npm. Добавление тегов скрипт в тег head, как это не работает. И это не кажется лучшим способом.
<head>
<script src="node_modules/some_package/somejs.js">
</head>
//With systemJs I could do this
<head>
<script src="vendor/some_package/somejs.js">
</head>
Вариант B
включите эти файлы js в состав пакета webpack. Это выглядит так так, вероятно, должно быть сделано. Однако я не уверен, как это сделать, поскольку весь код webpack, похоже, скрыт за пакетом узла angular-cli-webpack. Я думал, может быть, есть еще одна конфигурация webpack, к которой у нас может быть доступ. Но я не уверен, так как я не видел его при создании нового проекта angular-cli-webpack.
Подробнее:
файлы js, которые я пытаюсь включить, должны быть включены до углового проекта. Для пример jQuery и сторонний JS lib, который на самом деле не настроен для загрузки модуля или typescript.
ссылки
https://github.com/angular/angular-cli/blob/master/WEBPACK_UPDATE.md
https://github.com/angular/angular-cli/tree/webpack
5 ответов:
последний тест с использованием angular-cli 1.0.0 с Angular 4.0.0
это можно сделать с помощью
scripts:[]in.angular-cli.json.{ "project": { "version": "1.0.0", "name": "my-project" }, "apps": [ { "root": "src", "outDir": "dist", "assets": ["assets"], "index": "index.html", "main": "main.ts", "polyfills": "polyfills.ts", "test": "test.ts", "tsconfig": "tsconfig.json", "prefix": "app", "mobile": false, "styles": [ "styles.css" ], "scripts": [ "../node_modules/jquery/dist/jquery.js" ], "environments": { "source": "environments/environment.ts", "dev": "environments/environment.ts", "prod": "environments/environment.prod.ts" } } ], "addons": [], "packages": [], "e2e": { "protractor": { "config": "./protractor.conf.js" } }, "test": { "karma": { "config": "./karma.conf.js" } }, "defaults": { "styleExt": "css", "prefixInterfaces": false } }Примечание: как документация предполагает в глобальной библиотеке установки: если вы измените значение вашего
styles(илиscripts!) свойство, то:перезапустите ng serve, если вы его запускаете,
..чтобы увидеть скрипты, выполняемые в **функции через .
Примечание: как обсуждается в комментариях ниже. JS libs, которые поддерживают модули UMD через es6 imports такие как jQuery также могут быть импортированы в ваши файлы typescript с помощью синтаксиса импорта es6. Например:
import $ from 'jquery';.
есть тонкая разница в использовании
scripts:[]затем добавить что-то к<head>С<script>. Скрипты отscripts:[]добавить вscripts.bundle.jsкоторый всегда загружается в тег body и, таким образом, будет загружен после сценарии<head>. Таким образом, если порядок загрузки скрипта имеет значение (т. е. вам нужно загрузить глобальный полифилл), то ваш единственный вариант-вручную скопировать скрипты в папку (например, со скриптом npm) и добавить эту папку как актив to.angular-cli.json.так что если вы действительно зависите от чего-то загружается до угловые (Вариант A), затем вам нужно скопировать его вручную в папку, которая будет включена в угловую сборку, а затем вы можете загрузить ее вручную с помощью
<script>на<head>.таким образом, для достижения вариант a вы должны:
- создать на
src/добавить эту папку в качестве актив до
.angular-cli.json:"assets": [ "assets", "favicon.ico", "vendor" ]скопируйте сценарий поставщика
node_modules/some_package/somejs.jsдоvendorзагрузить его вручную в
index.html:<head> <script src="vendor/some_package/somejs.js"> </head>однако большую часть времени вам нужен только этот подход для пакетов, которые должны быть доступны во всем мире, до все остальное (т. е. определенные полифиллы). Ответ Криса справедлив для Вариант B и вы получаете преимущество сборки webpack (Минификация, Хэши,...).
однако если ваши скрипты не нужно быть глобально доступны, и если они готовы ли модули вы можете импортировать их в
src/polyfills.tsили даже лучше импортировать их только тогда, когда они нужны в ваших конкретных компонентов.сделать скрипты глобально доступными через
scripts:[]или через ручную загрузку они приносят ему собственный набор проблем и должны действительно использоваться только тогда, когда это абсолютно необходимо.
вам нужно открыть файл
.angular-cli.jsonфайл и нужно искать"scripts:"или если вы хотите добавить внешний CSS вам необходимо найти слово"styles":в одном файле.в качестве примера, показанного ниже, вы увидите, как bootstrap Js (
bootstrap.min.js) и bootstrap CSS (bootstrap.min.css) включает.angular-cli.json:"styles": [ "styles.css", "../node_modules/bootstrap/dist/css/bootstrap.min.css" ], "scripts": [ "../node_modules/jquery/dist/jquery.min.js", "../node_modules/bootstrap/dist/js/bootstrap.min.js" ],конечно, если у вас есть свой собственный файл js, вы можете добавить свой путь к файлу здесь в
.angular-cli.jsonв том же месте(в"scripts":[]).
возможно, вы захотите взглянуть на эту страницу: https://github.com/angular/angular-cli#global-library-installation
Он показывает основы того, как включить .js and .css файлы
некоторые библиотеки javascript должны быть добавлены в глобальную область и загружены, как если бы они были в теге скрипта. Мы можем сделать это с помощью приложения[0].скрипты и программы[0].свойства стилей angular-cli.формат JSON.
Я не использовал angular-cli раньше, но в настоящее время я работаю с сборкой Angular/Webpack. Для того, чтобы предоставить мое приложение с jQuery и других поставщиков я использую плагин webpack,
ProvidePlugin(). Это, как правило, сидеть в вашемwebpack.config.js: вот пример для библиотек jquery, lodash и moment. Вот ссылка на документация (что в лучшем случае расплывчато)plugins: [ new webpack.ProvidePlugin({ $: 'jquery', _: 'lodash', moment: 'moment', }) ]невероятно, это на самом деле позволяет использовать его сразу же, при условии, что все другие настройки webpack имеет было сделано правильно и были установлены с
npm.
Comments