使用angular-cli在没有节点服务器的情况下运行本地构建在Chrome上的角度2应用程序

Bar*_*rtB 27 javascript webpack ember-cli angular-cli angular

我将非常精确地使我的Angular 2问题.

我正在使用:

Angular 2,angular-cli:1.0.0-beta.15,(webpack building)节点:6.4.0,os:linux x64

2.我想要实现的目标:

我想以一种方式构建我的项目,在构建之后(ng build project-name)我获得了我的Angular 2应用程序的静态文件,我可以直接从chrome运行而不使用ng服务或节点服务器.我只想双击index.html并在本地运行应用程序.

3.同时,当我双击生成的index.html时,我在chrome浏览器控制台输出中获得的是:

file:///inline.js无法加载资源:net :: ERR_FILE_NOT_FOUND文件:///styles.b52d2076048963e7cbfd.bundle.js无法加载资源:net :: ERR_FILE_NOT_FOUND文件:///main.c45bb457f14bdc0f5b96.bundle.js无法加载资源:net :: ERR_FILE_NOT_FOUND文件:///favicon.ico无法加载资源:net :: ERR_FILE_NOT_FOUND

  1. 据我所知,这与路径有关.构建和捆绑的应用程序找不到正确的路径.所以我的问题是我应该在哪里以及如何更改我的应用程序或任何构建配置文件的路径,以便我的应用程序像我希望的那样以我在第2点中描述的方式工作

  2. 提前感谢您对该主题的直接和完整答案,因为其他主题并未解释该主题的全部范围.

sab*_*buz 28

第一步:

运行命令

ng build
Run Code Online (Sandbox Code Playgroud)

要么

ng build -prod (then it will compact all files for production version)
Run Code Online (Sandbox Code Playgroud)

第二步:

index.html中的变化

<base href="/"> to <base href="./">
Run Code Online (Sandbox Code Playgroud)

第三步:

将所有文件放入服务器(可能是localhost或任何服务器中的htdoc)

希望它能奏效.

  • @Khaleel因为要确保你的文件路径是相对于当前目录而不是相对于我们必须添加`.`的根目录. (2认同)

小智 25

解决方案,而服务器:

第一步:

变更index.html:

去掉 <base href="/">

第二步:

变更app.module.ts:

import { CommonModule, APP_BASE_HREF, LocationStrategy, HashLocationStrategy} from '@angular/common';

@NgModule({
   providers: [
       { provide: APP_BASE_HREF, useValue: '/' },
       { provide: LocationStrategy, useClass: HashLocationStrategy }
   ]
})
Run Code Online (Sandbox Code Playgroud)

第三步:

运行命令

ng build
Run Code Online (Sandbox Code Playgroud)

要么

ng build -prod
Run Code Online (Sandbox Code Playgroud)

双击dist/index.html以查看结果.


Nel*_*ari 10

如果您正在使用Angular-Cli,则在构建项目后无需修改index.html.根据Angular-CLi github文档https://github.com/angular/angular-cli#base-tag-handling-in-indexhtml, 您可以在构建项目时简单地修改参数:

    Example: ng build --prod --base-href .
Run Code Online (Sandbox Code Playgroud)

实际用法是:

ng build --base-href <base>
Run Code Online (Sandbox Code Playgroud)

你可以简单地引入一个特定的URL而不是base.在这个例子中我们使用.(点)作为参数

  • ```ng build --base-href ./ ``` (2认同)

Mat*_*att 9

一个简单的解决方案:在构建时更改基础href.

ng build --prod --base-href .
Run Code Online (Sandbox Code Playgroud)

现在您可以双击该index.html文件,它将起作用.

以下是此工作的一个示例:https://mattspaulding.github.io/angular-material-starter/


gel*_*181 6

您必须/dist使用HTTP服务器为该文件夹提供服务。您无法解决此问题,因为出于安全原因,本地加载文件不允许执行代码。

服务器不必像Express那样繁重,甚至不必像Ha​​piJS这样功能强大的极简主义者。内置的Node http服务器会很好。如果您已经设置了Apache,nginx或IIS,则也可以使用它们来服务您的应用程序。

编辑:我做了一些道德搜索,并决定提供一个我个人不会使用的解决方案,但可能更适合您:适用于Chrome扩展程序的Web服务器

  • +1是唯一的答案,它解释了为什么无法从/ dist目录加载index.html。但是,仍然需要找到更多有关为什么角度生成的带有引用的javascript文件的静态html构成安全威胁的详细信息。以及为什么我只在同一个文件夹中用javascript文件编写一个简单的html时起作用。 (3认同)