使用angular-cli在Chrome上运行一个本地构建的angular 2应用,不需要节点服务器
Running an angular 2 application built locally on Chrome using angular-cli without a node server
我会让我的Angular 2问题非常精确。
1。我正在使用:
角2,angular-cli: 1.0.0-beta。15、(webpack大厦)节点:6.4.0,操作系统:Linux x64
2。我想达到的目标:
我想构建我的项目,在构建(ng build project-name)之后,我得到我的Angular 2应用程序的静态文件,我可以直接从chrome运行,而不使用ng serve或节点服务器。我只是想双击index.html并在本地运行应用程序。
3。同时,当我双击生成的index.html时,我在chrome浏览器控制台输出中得到的是:
file:///inline.js加载资源:net::ERR_FILE_NOT_FOUND失败文件:///b52d2076048963e7cbfd.bundle.js加载资源:net::ERR_FILE_NOT_FOUND失败文件:///main.c45bb457f14bdc0f5b96.bundle.js加载资源:net::ERR_FILE_NOT_FOUND失败文件:///favicon.ico加载资源失败:net::ERR_FILE_NOT_FOUND
-
据我所知,这与路径有关。构建和捆绑的应用程序无法找到正确的路径。所以我的问题是哪里和如何我应该改变路径在我的应用程序或任何构建配置文件为了让我的应用程序工作,就像我希望它以我在点2
中描述的方式工作 提前感谢您对该主题的直接和完整的回答,因为其他主题并没有解释该主题的全部范围。
第一步:
运行命令
ng build
或
ng build -prod (then it will compact all files for production version)
第二步:
修改index.html
<base href="/"> to <base href="./">
第三步:
将所有文件放入服务器(可能是本地主机或任何服务器的htdocs)
不带服务器的解决方案:
:
index.html
的变化:
remove <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 }
]
})
第三步:运行命令
ng build
或
ng build -prod
双击dist/index.html
查看结果
如果你使用的是Angular-Cli,你不需要在构建项目后修改index.html。根据Angular-CLi github文档https://github.com/angular/angular-cli#base-tag-handling-in-indexhtml您可以在构建项目时简单地修改参数:
Example: ng build --prod --base-href .
实际用法为:
ng build --base-href <base>
可以简单地引入一个特定的url而不是base。在这个例子中,我们使用。(点)作为参数
一个简单的解决方案:在构建时更改base href
ng build --prod --base-href .
现在你可以双击index.html
文件,它将工作。
下面是一个工作的例子:https://mattspaulding.github.io/angular-material-starter/
必须使用HTTP服务器为/dist
文件夹提供服务。由于安全原因,在本地加载文件不允许执行代码,因此无法绕过此问题。
服务器不需要像Express那样笨重,甚至不需要像HapiJS那样功能强大的极简主义服务器。内置的Node http-server就可以了。如果你已经安装了Apache、nginx或IIS,你也可以使用它们来服务你的应用。
编辑:我做了一些道德搜索,并决定提供一个解决方案,我个人不会使用,但可能是一个很适合你:Web服务器Chrome扩展
你所需要的就是用这一行代码来构建你的应用程序:
ng build --prod --base-href ./
我推荐使用Expressjs, why servers how xampp, laragon等…我创建了一个名为server的新文件夹,在里面复制了一个文件index.js,路由将是"src/assets/server/index.js",
Index.js内容
var express = require('express'),
path = require('path'),
fs = require('fs');
var app = express();
var staticRoot = __dirname + '/../../';
app.set('port', (process.env.PORT || 80));
app.use(express.static(staticRoot));
app.use(function(req, res, next){
var accept = req.accepts('html', 'json', 'xml');
if(accept !== 'html'){
return next();
}
var ext = path.extname(req.path);
if (ext !== ''){
return next();
}
fs.createReadStream(staticRoot + 'index.html').pipe(res);
});
app.listen(app.get('port'), function() {
console.log('app running on port', app.get('port'));
});
在包中。Json,在项目的根目录
{
"dependencies": {
"express": "4.13.4"
}
}
之后,在控制台运行命令ng build prod并运行
节点dist/资产/服务器/
这个命令执行一个express server,指示文件配置的方向我们的服务器,在这种情况下,文件index.js预配置
p。对不起,我的英语不好,我正在学习
从index.html
中删除<base href="/">
对我有效。
您可以使用nw.js(或electron)来实现类似的功能。我自己创建了一个应用程序,在本地使用angular 2和nw.js,它像魅力一样工作;)
nwjs.io
使用ng serve——open来构建应用程序并启动web服务器
- Grunt构建导致Angular应用程序在dist上崩溃
- 如何构建angular.js应用程序
- 有没有一种方法可以基于Angular 2中注册的路线构建动态导航/菜单
- 在Typescript中对array/JONS进行迭代,以构建带有子菜单的Angular 2模板菜单
- 用angular指令构建嵌套树
- Angular UI路由器:UI不使用参数构建href
- 在Angular中构建一个可重复使用的D3.js图表,其宽度为100%
- Gulp Angular 构建模板缓存问题
- 在 Angular JS 中将 Json 数据从控制器传递到 View 以构建表
- 使用 Angular 提供程序构建 OData $filter URL
- Angular Fullstack-grunt构建不包括javascript文件
- TypeScript的VS2015构建提供了“;TS2304:Build找不到有角度的“;错误,尽管存在angular.
- CSS和JS在用gulp和angular.JS构建的网站中作为HTML的副本加载
- 如何使用Highcharts和大量动态数据构建Angular
- 如何使用wiredep将bread.bridge.angular添加到我的构建过程中
- AngularJs-为什么像Angular strap和UI Bootstrap这样的指令使用提供者来构建他们的组件
- 如何在angular中构建摘录功能
- 如何用许多脚本构建一个Angular应用程序,而在HTML中只有一个脚本标记
- Angular 2构建工具首选项
- Angular构建了一个数组