No estoy seguro de cómo incluir archivos JS (proveedores) después de cambiar Angular Cli de SystemJs a Webpack.
Por ejemplo
Opción A
Tengo algunos archivos js que se instalaron a través de npm. Agregar etiquetas de secuencia de comandos a la etiqueta de la cabeza de esta manera no funciona. Tampoco parece la mejor forma.
<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>
Opción B
Incluya estos archivos js como parte del paquete webpack. Esta parece la forma en que probablemente debería hacerse. Sin embargo, no estoy seguro de cómo hacer esto ya que todo el código del paquete web parece estar oculto detrás del paquete de nodo angular-cli-webpack. Estaba pensando que tal vez hay otra configuración de paquete web a la que podríamos tener acceso. Pero no estoy seguro, ya que no vi ninguno al crear un nuevo proyecto angular-cli-webpack.
Más información:
Los archivos js que estoy tratando de incluir deben incluirse antes del proyecto Angular. Por ejemplo, jQuery y un js lib de terceros que no está realmente configurado para cargar módulos o mecanografiar.
Referencias https://github.com/angular/angular-cli/blob/master/WEBPACK_UPDATE.md https://github.com/angular/angular-cli/tree/webpack
fuente
Respuestas:
Última prueba usando angular-cli 7.xx con Angular 7.xx
Esto se puede lograr usando
scripts:[]
en.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 } }
Nota: Como sugiere la documentación en la instalación de la biblioteca global: si cambia el valor de su propiedad
styles
(scripts
¡ o !), Entonces:..para ver los scripts ejecutados en un ** contexto global a través del
scripts.bundle.js
archivo.Nota: Como se explica en los comentarios a continuación. Las bibliotecas JS que admiten módulos UMD a través de importaciones de es6 , como jQuery, también se pueden importar a sus archivos de mecanografiado utilizando la sintaxis de importación es6. Por ejemplo:
import $ from 'jquery';
.fuente
src/polyfills.ts
(a partir de la versión beta.31)Hay una diferencia sutil entre usar y
scripts:[]
luego agregar algo al<head>
con<script>
. Los scriptsscripts:[]
se agregan alscripts.bundle.js
que siempre se cargan en la etiqueta del cuerpo y, por lo tanto, se cargarán DESPUÉS de los scripts en<head>
. Así, si el orden es importante carga de la escritura (es decir, tiene que cargar un polyfill global), entonces su única opción es copiar manualmente los scripts en una carpeta (por ejemplo, con un guión NPM) y añadir esta carpeta como un activo a.angular-cli.json
.Entonces, si realmente depende de que algo se cargue antes de angular en sí ( Opción A ), entonces debe copiarlo manualmente a una carpeta que se incluirá en la compilación angular y luego puede cargarlo manualmente con un archivo
<script>
in<head>
.Por lo tanto, para lograr la opción a , debe:
vendor
carpeta ensrc/
.angular-cli.json
:"assets": [ "assets", "favicon.ico", "vendor" ]
copie su secuencia
node_modules/some_package/somejs.js
de comandos de proveedor avendor
cargarlo manualmente en
index.html
:<head> <script src="vendor/some_package/somejs.js"> </head>
Sin embargo, la mayoría de las veces solo necesita este enfoque para los paquetes, que deben estar disponibles globalmente, antes que todo lo demás (es decir, ciertos polyfills). La respuesta de Kris es válida para la Opción B y obtiene el beneficio de la compilación del paquete web (Minificación, Hashes, ...).
Sin embargo, si sus scripts no necesitan estar disponibles globalmente y si están listos para módulos, puede importarlos
src/polyfills.ts
o, mejor aún, importarlos solo cuando los necesite en sus componentes específicos.Hacer que los scripts estén disponibles globalmente a través
scripts:[]
o cargándolos manualmente trae su propio conjunto de problemas y realmente solo debe usarse cuando sea absolutamente necesario.fuente
Debe abrir el
.angular-cli.json
archivo y buscarlo,"scripts:"
o si desea agregar CSS externo, debe encontrar la palabra"styles":
en el mismo archivo.como un ejemplo que se muestra a continuación, verá cómo bootstrap Js (
bootstrap.min.js
) y bootstrap CSS (bootstrap.min.css
) se incluyen en.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" ],
Por supuesto, si tiene su propio archivo js, puede agregar la ruta del archivo aquí en
.angular-cli.json
el mismo lugar (en"scripts":[]
).fuente
Es posible que desee echar un vistazo a esta página: https://github.com/angular/angular-cli#global-library-installation
Muestra los conceptos básicos de cómo incluir archivos .js y .css
fuente
No había usado angular-cli antes, pero actualmente estoy trabajando con una compilación Angular / Webpack. Con el fin de ofrecer mi solicitud con jQuery y otros proveedores utilizo el plugin de webpack,
ProvidePlugin()
. Esto normalmente se ubicará en suwebpack.config.js
: Aquí hay un ejemplo para las bibliotecas jquery, lodash y moment. Aquí hay un enlace a la documentación (que es vaga en el mejor de los casos)plugins: [ new webpack.ProvidePlugin({ $: 'jquery', _: 'lodash', moment: 'moment', }) ]
Increíblemente, en realidad le permite usarlo de inmediato, siempre que todas las demás configuraciones del paquete web se hayan realizado correctamente y se hayan instalado con
npm
.fuente
ng build
todo esto es manejado por el cli. Pero estaba pensando que probablemente hay una forma de agregar cosas como parte de la compilación. Pero no he visto ningún ejemplo claro.