¿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.

Author: Kizmar, 2016-09-16

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

 84
Author: Md Ayub Ali Sarker,
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.

 48
Author: Meligy,
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.

 7
Author: Joe Purdy,
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í.

 1
Author: Alex Lin,
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