¿Cómo incluir archivos personalizados con angular - cli build?
RE: Angular2 2.0.0, angular-cli v1.0.0-beta.11-webpack.8
¿Cómo le digo a angular-cli que incluya un archivo de "src/assets" en la raíz de "dist" cuando se compila?
Implementamos en un host de Windows y necesitamos incluir un "web.config " archivo para decirle a IIS que dirija todo a index. Estábamos haciendo esto pre RC4, pero con toda la actualización se cayó a través de las grietas (no recuerdo cómo lo hicimos).
He estado rastreando los documentos de repositorio de GitHub y no he encontrado cualquier cosa útil con respecto a este tema. Tal vez estoy en el lugar equivocado?
En el índice , hay una viñeta "Agregar archivos adicionales a la compilación", pero parece que esa sección no existe.
4 answers
La propiedad "assets" de angular-cli.json se puede configurar para incluir archivos personalizados en la compilación webpack de angular-cli. Por lo tanto, configure el valor de la propiedad "assets" como una matriz. Por ejemplo:
"assets": ["assets", "config.json",".htaccess"],
La configuración anterior copiará la configuración.jsn y .htaccess en la carpeta dist durante la compilación del webpack angular-cli. el ajuste anterior funcionó en angular-cli versión 1.0.0-beta.18
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-31 19:08:15
Respuesta correcta actual:
El equipo ha agregado soporte para copiar archivos específicos tal como están en la carpeta de salida (dist
por defecto) en una versión posterior de Angular CLI (sería beta 17 o 19-ha estado en final 1.x releases for ages).
Simplemente añádelo a la matriz en angular-cli.json
como:
{ ... "apps" [ { "root": "src", "assets": [ "assets", "web.config" ], ... } ] ... }
(Tenga en cuenta que la ruta es relativa a la carpeta src
)
Yo personalmente lo uso y funciona muy bien.
A partir de beta 24, he añadido un característica a Angular CLI que se asegura de que todos los archivos y carpetas assets
se sirven desde el servidor dev de webpack cuando se ejecuta ng test
no solo ng serve
.
También admite el servicio de archivos asset en el servidor webpack dev utilizado para las pruebas unitarias (ng test
).
(en caso de que necesite algunos archivos JSON para las pruebas, o simplemente odie ver las advertencias 404 en la consola).
Ya se sirven desde ng e2e
porque se ejecuta un ng serve
completo.
Y también tiene características más avanzadas, como filtrar los archivos que desea de una carpeta, y tener el nombre de la carpeta de salida diferente de la carpeta de origen:
{ ... "apps" [ { "root": "src", "assets": [ "assets", "web.config", { // Copy contents in this folder "input": "../", // That matches this wildcard "glob": "*.config", // And put them in this folder under `dist` ('.' means put it in `dist` directly) "output": "." } ], ... } ] ... }
.
.
[SOLO PARA ARCHIVAR] Respuesta original (Oct 6, 2016):
Esto no está soportado actualmente desafortunadamente (a partir de beta-16). Planteé la preocupación exacta al equipo (web.archivos de configuración), pero no parece estar sucediendo en el corto plazo (a menos que esté bifurcando la CLI, etc.).
Seguir este número para el pleno discusión y posibles detalles futuros.
P. S.Para el archivo JSON, puede ponerlo en ./src/assets/
. Esta carpeta se copia tal cual en ./dist/assets/
. Este es el comportamiento actual.
Anteriormente en los días de SystemJS había otra carpeta ./public/
que se copió a ./dist/
directamente, pero esto se ha ido en las versiones de Webpack, que el problema mencionado anteriormente discute.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-19 23:43:13
Una solución (aunque en mi opinión es un poco un truco) es declarar una variable en su archivo main.ts
que requiere el archivo adicional que desea incluir en la salida de compilación de webpack.
EX:
import './polyfills.ts';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { environment } from './environments/environment';
import { AppModule } from './app/';
/* HACK: Include standalone web.config file manually in webpack build
*
* Due to the way the beta angular-cli abstracts the webpack config files into
* angular-cli.json and lacks current documentation we were unable to find
* a way to include additional files manually in the webpack build output.
*
* For hosting on IIS we need to include a web.config file for
* specifying rewrite rules to make IIS compatible with the Angular Router.
* The one liner following this comment is a hack to accomplish this
* and should be reviewed and corrected as soon as adequete documentation
* is available for the angular-cli configuration file.
*/
const webConfig = require('file?name=[name].[ext]!./web.config');
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule);
Cuando webpack encuentra esta declaración de variable en main.ts
emitirá el archivo raw web.config
como parte de la salida de compilación:
Asset Size Chunks Chunk Names
inline.map 5.59 kB 2 [emitted] inline
web.config 684 bytes [emitted]
styles.bundle.js 16.7 kB 1, 2 [emitted] styles
inline.js 5.53 kB 2 [emitted] inline
main.map 5.36 MB 0, 2 [emitted] main
styles.map 22.6 kB 1, 2 [emitted] styles
main.bundle.js 4.85 MB 0, 2 [emitted] main
index.html 1.98 kB [emitted]
assets/.npmignore 0 bytes [emitted]
assets/styles/global.css 2.74 kB [emitted]
Child html-webpack-plugin for "index.html":
Asset Size Chunks Chunk Names
index.html 4.45 kB 0
webpack: bundle is now VALID.
Una solución ideal estaría en la configuración de webpack, pero no puedo hacer cara o cruz de cómo angular-cli está gestionando eso a través de angular-cli.json
hasta ahora (beta.16).
Así que si alguien tiene una mejor respuesta que extiende la configuración de webpack para un proyecto generado por angular-cli me encantaría escucharla.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-05 19:16:07
Hay una sección "scripts" en angular-cli.archivo json. Puede agregar todos los archivos javascript de terceros allí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-16 20:10:17