回复:Angular2 2.0.0,angular-cli v1.0.0-beta.11-webpack.8
我如何告诉 angular-cli 在构建时将来自“src/assets”的文件包含在“dist”的根目录中?
我们部署到 Windows 主机并需要包含一个“web.config”文件来告诉 IIS 将所有内容路由到索引。我们是在 RC4 之前做的,但是随着所有的更新,它落入了裂缝(我不记得我们是怎么做到的)。
我一直在搜索 GitHub repo docs 并没有发现任何与此主题相关的有用信息。也许我在错误的地方?
在 ToC 中,有一个要点“向构建中添加额外文件”,但该部分似乎不存在。
"copy:webConfig": "node node_modules/copy/bin/cli.js web.config dist"
。我还添加了一个后期构建脚本:"postbuild": "npm run copy:webConfig"
。试图让副本正常工作还有其他问题,但这起到了作用。
angular-cli.json 的“assets”属性可以配置为在 angular-cli webpack 构建中包含自定义文件。因此,将“资产”属性值配置为数组。例如:
"assets": ["assets", "config.json",".htaccess"],
以上配置将在 angular-cli webpack 构建期间将 config.jon 和 .htaccess 复制到 dist 文件夹中。以上设置在 angular-cli 版本 1.0.0-beta.18 中有效
更新关于这方面的最新文档可以在以下位置找到:https://angular.io/guide/workspace-config#assets-configuration 下面的显着变化配置文件现在称为 angular.json 路径现在相对于根项目不是 src
该团队在更高版本的 Angular CLI(将是 beta 17 或 19 - 它已经在最终的 1.x 版本中使用了很长时间)中添加了对将特定文件按原样复制到输出文件夹(默认为 dist
)的支持。
您只需将其添加到 angular-cli.json
中的数组中,例如:
{ ... "apps" [ { "root": "src", "assets": [ "assets", "web.config" ], ... } ] ... }
(注意路径是相对于
src
文件夹的)
我个人使用它,它工作得很好。
从 beta 24 开始,我有 added a feature 到 Angular CLI,它确保在运行 ng test
而不仅仅是 ng serve
时,所有 assets
文件和文件夹都从 webpack 开发服务器提供。 罢工>
它还支持在用于单元测试的 webpack 开发服务器中提供资产文件 (ng test
)。
(如果您需要一些 JSON 文件进行测试,或者只是不想在控制台中看到 404 警告)。
它们已经从 ng e2e
提供,因为它运行完整的 ng serve
。
它还具有更高级的功能,例如从文件夹中过滤您想要的文件,以及使输出文件夹名称与源文件夹不同:
{ ... "apps" [ { "root": "src", "assets": [ "assets", "web.config": { // Copy contents in this folder "input": "../", // That matches this wildcard "glob": "*.config", // And put them in this folder under `dist` ('.' means put it in `dist` directly) "output": "." } ], ... } ] ... }
也可以参考官方文档:Angular Guide - Workspace configuration。
.
[仅供存档] 原始答案(2016 年 10 月 6 日):
不幸的是,目前不支持此功能(从 beta-16 开始)。我向团队提出了确切的担忧(web.config 文件),但它似乎不会很快发生(除非你正在分叉 CLI 等)。
关注 this issue 以获取完整讨论和未来可能的详细信息。
附言
对于 JSON 文件,您可以将其放在 ./src/assets/
中。此文件夹按原样复制到 ./dist/assets/
。这是当前的行为。
在 systemJS 的早期,有另一个 ./public/
文件夹被直接复制到 ./dist/
,但是在 Webpack 版本中没有了,上面提到的问题讨论了这个问题。
{ "input": "./", "glob": "*.config", "output": "."}
在这种情况下,配置文件与 angular.json 位于同一位置(在项目的根目录上)并且在构建之后出现在 dist 文件夹内项目的根目录中
对于 Angular 8 读者,
.htaccess
必须是 src/.htaccess
。见下文,
"assets": [
"src/favicon.ico",
"src/assets",
"src/.htaccess"
],
确保您已将 .htaccess
文件放在项目的 src
目录中。
并且放入的文件是 angular.json,而不是 angular-cli.json
(如果您需要一个有效的 htaccess
文件,那么您可以在这里找到一个 - https://stackoverflow.com/a/57126352/767625)
而已。现在应该在您点击 ng build --prod=true
时复制它。
希望这可以帮助某人。
干杯,
angular.json
,而不是前面答案中提到的 angular-cli.json
。
一种解决方案(尽管在我看来有点破解)是在您的 main.ts
文件中声明一个变量,该变量需要您想要包含在 webpack 构建输出中的额外文件。
前任:
import './polyfills.ts';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { environment } from './environments/environment';
import { AppModule } from './app/';
/* HACK: Include standalone web.config file manually in webpack build
*
* Due to the way the beta angular-cli abstracts the webpack config files into
* angular-cli.json and lacks current documentation we were unable to find
* a way to include additional files manually in the webpack build output.
*
* For hosting on IIS we need to include a web.config file for
* specifying rewrite rules to make IIS compatible with the Angular Router.
* The one liner following this comment is a hack to accomplish this
* and should be reviewed and corrected as soon as adequete documentation
* is available for the angular-cli configuration file.
*/
const webConfig = require('file?name=[name].[ext]!./web.config');
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule);
当 webpack 在 main.ts
中遇到这个变量声明语句时,它将发出原始 web.config
文件作为构建输出的一部分:
Asset Size Chunks Chunk Names
inline.map 5.59 kB 2 [emitted] inline
web.config 684 bytes [emitted]
styles.bundle.js 16.7 kB 1, 2 [emitted] styles
inline.js 5.53 kB 2 [emitted] inline
main.map 5.36 MB 0, 2 [emitted] main
styles.map 22.6 kB 1, 2 [emitted] styles
main.bundle.js 4.85 MB 0, 2 [emitted] main
index.html 1.98 kB [emitted]
assets/.npmignore 0 bytes [emitted]
assets/styles/global.css 2.74 kB [emitted]
Child html-webpack-plugin for "index.html":
Asset Size Chunks Chunk Names
index.html 4.45 kB 0
webpack: bundle is now VALID.
一个理想的解决方案是在 webpack 配置中,但到目前为止,我无法确定 angular-cli 如何通过 angular-cli.json
管理它(beta.16)。
因此,如果有人有更好的答案来扩展 angular-cli 生成项目的 webpack 配置,我很乐意听到。
angular-cli.json 文件中有一个“脚本”部分。您可以在那里添加所有第三方 javascript 文件。
修改 angular.json。向资产数组添加条目:
{
"glob": "**/web.config",
"input": "src/",
"output": "./"
}
就我而言,我使用了 Angular 版本 5,因此我在运行 ng build --prod 命令时尝试创建名为 Staticfile.txt 的文件。确保给出文件扩展名,否则它不会创建文件。