TL; DR :Angular 2应用程序中的应用程序根文件夹在哪里?如何使用ng build
同等地部署我的应用程序,并在使用子目录时通过ng serve
运行/开发它?
这个问题适用于使用Webpack的Angular> = 2.4而不是AngularJS2 alpha-beta-whatever。在以下示例中,我也使用angular-cli@1.0.0-beta.26而非@ angular / cli。
在stackoverflow上已经有一些关于<base href="...">
的问题,但我认为我没有理解解决方案或我的问题得到了适当的回答。
示例
我有一个项目,我的应用程序部署在目录sub/
中的Web服务器上。应用程序的<base>
- 元素当然是<base href="/sub/">
。项目结构是由angular-cli生成的(请不要挑剔'/')
project/
--src/
----app/
------app.module
----assets/
----index.html
----[...]
当我通过ng build
构建项目并将结果从dist/
文件夹复制到我的网络服务器(到sub/
)时,应用程序在mydomain/sub/
运行正常。当我尝试通过ng serve
运行应用程序时,它似乎无法找到正确的命令来让应用程序在localhost/sub/
运行。编辑任何配置文件或使用-lrbu
标志都不会对我的构建产生影响。
如果app文件夹是应用程序根目录,就像示例应用程序一样,请完全按照此处所示设置href值。
<base href="/">
出现第一个问题:应用根文件夹在哪里?
我假设应用程序根目录是我在src/
中配置的application-cli.json
目录,但我不确定,因为app文件夹也可能是app/
。
我尝试的是在添加实际的sub/
文件夹(例如
project/
--src/
----sub/
------app/
--------app.module
----assets/
----index.html
或
project/
--src/
----app/
------sub/
--------app.module
----assets/
----index.html
并编辑了一些有趣效果的*.config.json
个文件。其中一个变体使我的应用程序根据需要使用ng serve
但“破坏”我的部署'因为ng build
会产生类似
dist/
--sub/
----assets/
----index.html
--main.bundle.js
--inline.bundle.js
--[...]
虽然我想在我的sub/
目录中拥有javascript块,但结果对我来说没问题。这可以通过更改outDir
中的application-cli.json
属性,但再次中断ng serve
或结果
dist/
--sub/
----sub/
------assets/
------index.html
----main.bundle.js
----inline.bundle.js
----[...]
现在我真的不记得是什么让它适合我,但我想知道这个问题的正确解决方案是什么。