jak zmienić ścieżkę do folderu dist w angular-cli po 'ng build'

112

Chciałbym używać angular-cli z rdzeniem asp.net i muszę wiedzieć, jak mogę zmienić ścieżkę do folderu dist

cuppy
źródło

Odpowiedzi:

74

Możesz zaktualizować folder wyjściowy w .angular-cli.json:

"outDir": "./location/toYour/dist"
shaun bradridge
źródło
14
Czy można umieścić plik index.html w ./location/toYour/dist i paczki javascript w podfolderze, np ./location/toYour/dist/bundles
Naveed Ahmed
1
Czy ktoś wie o jakichkolwiek aktualizacjach dotyczących dalszego dostosowywania outDir? css / ts / w osobnych ścieżkach
fidev
190

Bardziej aktualnym sposobem jest aktualizacja outDirwłaściwości w .angular-cli.json.

ng buildArgumentem polecenia --output-path(lub -opw skrócie) jest nadal obsługiwana również, co może być przydatne, jeśli chcesz wiele wartości, można zapisać je w package.jsonjak skrypty KMP.

Uwaga:.angular-cli.json nieruchomość nie nazywa output-pathjak aktualnie akceptowanych odpowiedzi przez @ cwill747 mówi. To ng buildtylko argument.

Nazywa się, outDirjak wspomniano powyżej, i znajduje się pod appswłasnością.

.

PS

(Grudzień 2017)

Rok po dodaniu tej odpowiedzi ktoś dodał nową odpowiedź z zasadniczo tymi samymi informacjami, a oryginalny plakat zmienił zaakceptowaną odpowiedź na odpowiedź spóźnioną o rok, zawierającą te same informacje w pierwszym wierszu tej odpowiedzi.

Meligy
źródło
3
Czy można umieścić plik index.html w ./location/toYour/dist i paczki JavaScript w podfolderze, np ./location/toYour/dist/bundles
Naveed Ahmed
10
: D PS jest gorzki
Sunil Kumar
4
najlepsze PS, jakie tu widziałem
Frenkey
prawdopodobnie promuje tutaj swojego przyjaciela, to jest korupcja
Alexander Borovoi
69

W Angular 6+ trochę się zmieniło.

Zdefiniuj, gdzie ng build generuje pliki aplikacji

Konfiguracja Cli jest teraz wykonywana w angular.json (zastąpiona .angular-cli.json) w katalogu głównym obszaru roboczego. Ścieżka wyjściowa w domyślnym angular.json powinna wyglądać następująco (usunięto nieistotne wiersze):

{
  "projects": {
    "my-app-name": {
    "architect": {
      "options": {
         "outputPath": "dist/my-app-name",

Oczywiście wygeneruje to twoją aplikację w WORKSPACE / dist / my-app-name. Zmodyfikuj outputPath, jeśli wolisz inny katalog.

Możesz nadpisać ścieżkę wyjściową za pomocą argumentów wiersza poleceń (np. Dla zadań CI):

ng build -op dist/example
ng build --output-path=dist/example

Sa https://github.com/angular/angular-cli/wiki/build

Hostowanie aplikacji kątowej w podkatalogu

Ustawienie ścieżki wyjściowej powie kątowi, gdzie umieścić „skompilowane” pliki, ale jednak zmienisz ścieżkę wyjściową, podczas uruchamiania aplikacji angular nadal zakłada, że ​​aplikacja jest hostowana w katalogu głównym dokumentów serwera WWW.

Aby działało w podkatalogu, musisz ustawić podstawowy href.

W angular.json:

{
  "projects": {
    "my-app-name": {
    "architect": {
      "options": {
         "baseHref": "/my-folder/",

Cli:

ng build --base-href=/my-folder/

Jeśli nie wiesz, gdzie aplikacja będzie hostowana w czasie kompilacji, możesz zmienić tag podstawowy w wygenerowanym pliku index.html.

Oto przykład, jak robimy to w naszym kontenerze docker:

entrypoint.sh

if [ -n "${BASE_PATH}" ]
then
  files=( $(find . -name "index.html") )
  cp -n "${files[0]}" "${files[0]}.org"
  cp "${files[0]}.org" "${files[0]}"
  sed -i "s*<base href=\"/\">*<base href=\"${BASE_PATH}\">*g" "${files[0]}"
fi
Christoph Lütjen
źródło
46

Możesz także użyć CLI, na przykład:

ng build -prod --output-path=production

# or

ng serve --output-path=devroot
Marian Zburlea
źródło
1
Czy można nadpisać katalog wyjściowy w angular-cli.json ?
Siergiej Rudakow
Wygląda na to, że ta funkcja będzie dostępna w ramach tego żądania ściągnięcia: github.com/angular/angular-cli/pull/1109
Daniel Patrick
17

Jedyną rzeczą, która działała dla mnie, była zmiana outDirw obu angular-cli.jsonANDsrc/tsconfig.json .

Chciałem, aby mój folder dist był poza folderem projektu kątowego. Jeśli nie zmieniłem ustawienia wsrc/tsconfig.json , Angular CLI wyrzuciłby ostrzeżenia za każdym razem, gdy buduję projekt.

Oto najważniejsze kwestie ...

// angular-cli.json
{
  ...
  "apps": [
    {
      "outDir": "../dist",
      ...
    }
  ],
  ...
}

I ...

// tsconfig.json
{
  "compilerOptions": {
    "outDir": "../../dist/out-tsc",
    ...
  }
}
NinjaFart
źródło
2
Niesamowite! Aktualizacja dla cli 7x, powyższe jest wykonane w angular.jsoni pole jest outputPath( tsconfig regulacja powyżej pozostaje taka sama). Hth
EdSF
17

Uwaga: poprawna odpowiedź znajduje się poniżej. To już nie działa

Utwórz plik o nazwie .ember-cliw swoim projekcie i umieść w nim następującą zawartość:

{
   "output-path": "./location/to/your/dist/"
}
cwill747
źródło
9

Angular CLI używa teraz do tego plików środowiska.

Najpierw dodaj environmentssekcję doangular-cli.json

Coś jak :

{
  "apps": [{
      "environments": {
        "prod": "environments/environment.prod.ts"
      }
    }]
}

A następnie wewnątrz pliku środowiska ( environments/environment.prod.tsw tym przypadku) dodaj coś takiego:

export const environment = {
  production: true,
  "output-path": "./whatever/dist/"
};

teraz kiedy biegasz:

ng build --prod

wyjdzie do ./whatever/dist/folderu.

swestner
źródło
1
Wygląda na najlepszą odpowiedź, ale Angular CLI nadal publikuje moje pliki w folderze dist. Wersja:angular-cli: 1.0.0-beta.21
NinjaFart
Z witryny Angular CLI Wiki : outDir (string): katalog wyjściowy wyników kompilacji. Domyślnie jest to dist /.
hbthanki
@hbthanki To jest przełącznik CLI, a nie plik środowiska json Właściwość
swestner
9

dla stron github, których używam

ng build --prod --base-href "https://<username>.github.io/<RepoName>/" --output-path=docs

Oto, co kopiuje dane wyjściowe do folderu dokumentów: --output-path=docs

unos baghaii
źródło
2

Inną opcją byłoby ustawienie ścieżki webroot do folderu angular cli dist. W swoim Program.cs podczas konfigurowania WebHostBuilder po prostu powiedz

.UseWebRoot(Directory.GetCurrentDirectory() + "\\Frontend\\dist")

lub jakakolwiek jest ścieżka do twojego dist dir.

Christian Götze
źródło