Подтвердить что ты не робот

Как добавить пользовательские файлы с помощью angular -cli build?

RE: Angular2 2.0.0, angular -cli v1.0.0-beta.11-webpack.8

Как сообщить angular -cli включить файл из "src/assets" в корень "dist" при его создании?

Мы развертываем на хост Windows и должны включать файл "web.config", чтобы сообщить IIS маршрутизировать все, чтобы индексировать. Мы делали этот предварительный RC4, но со всем обновлением он попадал в трещины (я не помню, как мы это делали).

Я прочесывал документы GitHub repo и не нашел ничего полезного в этой теме. Может быть, я не в том месте?

В ToC имеется маркер "Добавление дополнительных файлов в сборку", но кажется, что раздел не существует.

4b9b3361

Ответ 1

Свойство "assets" angular -cli.json может быть настроено для включения пользовательских файлов в angular -cli webpack build. Итак, настройте значение свойства "активы" как массив. Например:

"assets": ["assets", "config.json",".htaccess"],

выше конфигурация скопирует файлы config.jsn и .htaccess в папку dist во время сборки web-пакета angular -cli. выше настройки работали в angular -cli версии 1.0.0-beta.18

Ответ 2

Текущий правильный ответ:

Команда добавила поддержку для копирования определенных файлов как есть в выходную папку (dist по умолчанию) в более поздней версии Angular CLI (будет бета-версия 17 или 19 - она ​​была в финале 1.x выпуски на века).

Вы просто добавляете его в массив в angular-cli.json, например:

{
  ...
  "apps" [
    {
       "root": "src",
       "assets": [
         "assets",
         "web.config"
       ],
       ...
    }
  ]
  ...
}

(Обратите внимание, что путь относится к папке src)

Я лично использую его, и он работает отлично.

Начиная с бета-версии 24, добавила функцию в Angular CLI, которая гарантирует, что все файлы и папки assets подаются с сервера webpack dev при запуске ng test не только ng serve.

Он также поддерживает обслуживание файлов активов на сервере webpack dev, используемом для модульных тестов (ng test).
(в случае, если вам нужны некоторые файлы JSON для тестов, или просто ненавижу видеть 404 предупреждения в консоли).
Они уже поданы с ng e2e, потому что он выполняет полный ng serve.

И у него есть более сложные функции, такие как фильтрация файлов, которые вы хотите получить в папке, и наличие имени выходной папки, отличного от исходной папки:

{
  ...
  "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": "."
        }
      ],
      ...
    }
  ]
  ...
}

.


.

[ДЛЯ АРХИВИРОВАНИЯ ТОЛЬКО] Оригинальный ответ (6 октября 2016 года):

В настоящее время это не поддерживается (бета-16). Я поднял точную озабоченность команды (файлы web.config), но, похоже, это не происходит в ближайшее время (если вы не открываете CLI и т.д.).

Следуйте этой проблеме для полного обсуждения и возможных будущих подробностей.

Постскриптум

Для файла JSON вы можете поместить его в ./src/assets/. Эта папка скопирована как есть - ./dist/assets/. Это текущее поведение.

Раньше в systemJS-днях была другая папка ./public/, скопированная непосредственно на ./dist/, но это исчезло в версиях Webpack, о чем упоминается выше.

Ответ 3

Одним из решений (хотя, на мой взгляд, является немного взлома) является объявление переменной в вашем файле main.ts, для которого требуется дополнительный файл, который вы хотите включить в вывод сборки webpack.

Пример:

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);

Когда webpack встречает этот оператор объявления переменной в main.ts, он выдает исходный файл web.config как часть результата сборки:

                            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.

Идеальное решение было бы в конфигурации webpack, но я не могу сделать головы или хвосты того, как angular -cli управляет этим с помощью angular-cli.json пока (бета .16).

Итак, если у кого-то есть лучший ответ, который расширяет конфигурацию webpack для проекта angular -cli, который я хотел бы услышать.

Ответ 4

В файле angular -cli.json есть раздел "скрипты". Вы можете добавить туда все сторонние файлы javascript.

Ответ 5

В моем случае я использовал Angular версии 5, поэтому я попытался создать файл с именем Staticfile.txt при запуске команды ng build --prod. Удостоверьтесь, что дали расширение файла, иначе это не создаст файл.

Ответ 6

Для читателей Angular 8,

.htaccess должен быть src/.htaccess. Увидеть ниже,

 "assets": [
    "src/favicon.ico",
     "src/assets",
     "src/.htaccess"
  ],

Убедитесь, что вы поместили файл .htaccess каталог src вашего проекта. (Если вам нужен действительный файл htaccess, вы можете найти его здесь - fooobar.com/info/16160909/...)

Это. Теперь это должно быть скопировано, когда вы нажмете ng build --prod=true.

Надеюсь, это кому-нибудь поможет.

Ура,