在Angular 2应用程序中无法更改lite-server的基础文件夹
我正在经历Angular 2的5分钟快速入门 。 但是,我的应用程序驻留在src/
文件夹中,而不是存储在我的存储库的根目录下,当我运行npm start
,应用程序正试图在根目录中find一个index.html
文件。 我读了文件lite-server
和文档显示,它使用BrowserSync
和我可以重新configurationBrowserSync
与我的库中的bs-config.json
。 我这样做,这是我的configuration看起来像:
{ "port": 8123, "server": { "baseDir": "./src" } }
根据日志,它使用指定的configuration:
[1] > todo-app-angular2@1.0.0 lite E:\GitHub\todo-app-angular2 [1] > lite-server "./bs-config.json"
我也尝试了通过bs-config.js覆盖
module.exports = { port: 8123, server: { baseDir: "./src" } };
然而,Angular应用程序仍然在端口3000上打开,而忽略了configuration中定义的baseDir。 我究竟做错了什么?
您应该使用名为bs-config.js
(而不是bs-config.js
文件)的文件,因为lite-server会尝试使用require
函数加载模块。 该configuration应该是一个有效的节点模块:
module.exports = { "port": 8123, "server": { "baseDir": "./src" } };
请参阅源代码中的以下行: https : //github.com/johnpapa/lite-server/blob/master/lib/lite-server.js#L20 。
该文件默认从用户的项目文件夹中加载。
编辑
经过深入挖掘,我的答案的第一部分依赖于github的代码,但不是使用npm install
(版本1.3.4)实际安装的代码。
在这种情况下有两种select:
- 港口
- BASEDIR
使用这个命令将解决你的问题:
$ lite-server --baseDir ./src --port 3333
希望它能帮助你,Thierry
Thierry Templier
的答案并不完全正确,您可以使用bs-config.json
或bs-config.js
configuration来调整您的浏览器同步configuration。 这就是我最初提出的以JIT(Just-In-Time)和AOT(Ahead-Of-Time)编译支持( bs-config.json
) 为例的angular2快速入门示例 。
{ "port": 8000, "server": ["app", "."] }
从多个目录托pipe项目。
但是,我不喜欢这个解决scheme,因为通过覆盖json
文件中的server
部分,默认的middleware
configuration被同时覆盖。
因此,我以下面的方法结束,我采取了默认的lite-server的config-defaults.js
文件,并修改它( bs-config.js ):
'use strict'; var fallback = require('connect-history-api-fallback'); var log = require('connect-logger'); /* | For up-to-date information about the options: | http://www.browsersync.io/docs/options/ */ module.exports = { port: 8000, injectChanges: false, // workaround for Angular 2 styleUrls loading filters: ['./**/*.{html,htm,css,js}'], watchOptions: { ignored: 'node_modules' }, server: ['./', 'app'], middleware: [ log({ format: '%date %status %method %url' }), fallback({ index: '/index.html', htmlAcceptHeaders: ['text/html', 'application/xhtml+xml'] // systemjs workaround }) ] };