如何在Angular 2 CLI中使用“ng build --prod”和“ng serve --prod”,获得404错误

时间:2016-07-27 10:51:39

标签: javascript angular production-environment angular-cli

当我尝试使用--prod选项运行 ng build 时,它会编译成一个main.js文件,并且我在控制台中没有错误。

但是当我在浏览器中运行应用程序时,它仍然会查找单个js文件。

my main.ts:

// default
import { provide, enableProdMode, ExceptionHandler } from '@angular/core';
import { LocationStrategy, HashLocationStrategy } from '@angular/common';
import { bootstrap } from '@angular/platform-browser-dynamic';
import { HTTP_PROVIDERS, Http } from '@angular/http';

// External
import {
  TranslateService, TranslateLoader, TranslateStaticLoader
} from 'ng2-translate/ng2-translate';
import {Angulartics2} from 'angulartics2';

// mine
import { CustomExceptionHandler } from './app/_common/CustomExceptionHandler';
import { UserService } from './app/_services/user.service';
import { MessagesService } from './app/_services/messages.service';
import { APP_ROUTER_PROVIDERS } from './app/app.routes';
import { App, environment } from './app/';

if (environment.production) {
  enableProdMode();
}

bootstrap(App, [
  APP_ROUTER_PROVIDERS,
  HTTP_PROVIDERS,
  provide(ExceptionHandler, { useClass: CustomExceptionHandler }),
  provide(LocationStrategy, { useClass: HashLocationStrategy }),
  {
    provide: TranslateLoader,
    useFactory: (http: Http) => new TranslateStaticLoader(http, '/assets/i18n', '.json'),
    deps: [Http]
  },
  Angulartics2,
  TranslateService,
  MessagesService,
  UserService
])
.then(() => {
  console.log('Angular 2 loaded');
})
.catch(err => console.error(err));

当应用程序在浏览器中运行时,它会查找

app/_services/messages.service.js
app/_services/user.service.js
app/app.routes.js
etc...

所有这些请求当然都得到404,因为js文件都被压缩为一个main.js文件。我该如何避免这种情况?

1 个答案:

答案 0 :(得分:8)

构建产品时,路径会更改为您正在查看的系统的根目录,而不是应用程序的根目录。

通过将正确的路径从系统的用户根文件夹传递到构建项目所在的位置来构建它。

示例:

ng build -prod --base-href /tony/myproject/