如何使用angular-cli构build包含自定义文件?

RE:Angular2 2.0.0,angular-cli v1.0.0-beta.11-webpack.8

如何让angular-cli在“dist”的根目录下包含一个来自“src / assets”的文件?

我们部署到Windows主机,需要包含一个“web.config”文件告诉IIS将所有内容路由到索引。 我们在RC4之前做了这个,但是所有的更新都通过了这个漏洞(我不记得我们是怎么做的)。

我一直在淘GitHub回购文档 ,并没有发现有关这个话题的任何使用。 也许我在错误的地方?

在ToC中 ,有一个项目符号“添加额外的文件到版本”,但是看起来该部分不存在。

angular-cli.json的“assets”属性可以configuration为在angular-cli webpack构build中包含自定义文件。 所以,将“assets”属性值configuration为一个数组。 例如:

 "assets": ["assets", "config.json",".htaccess"], 

上面的configuration将在angular-cli webpack构build过程中将config.jsn和.htaccess复制到dist文件夹中。 以上设置在angular度 – 版本1.0.0-beta.18中工作

当前正确答案:

这个团队已经增加了对特定文件的拷贝,这个文件在更新版本的Angular CLI(默认情况下是dist 17或者17版本 – 这个版本已经在最终的1.x版本上发布了很久了)里面。

您只需将其添加到angular-cli.json的数组中angular-cli.json

 {
   ...
   “应用” [
     {
        “root”:“src”,
        “资产”:[
          “资产”,
         的 “web.config”
        ]
        ...
     }
   ]
   ...
 }

(请注意,path是相对于src文件夹)

我个人使用它,它工作得很好。

从testing版24开始,我为Angular CLI 添加了一项function ,确保所有assets文件和文件夹在运行ng test不受ng serve

它还支持服务于用于unit testing( ng test )的webpack dev服务器中的资产文件。
(如果您需要一些JSON文件进行testing,或者只是不想在控制台中看到404警告)。
他们已经从ng e2e提供服务,因为它运行了一个完整的ng serve

它还具有更高级的function,比如从一个文件夹中过滤你想要的文件,并且输出文件夹的名称与源文件夹不同:

 {
   ...
   “应用” [
     {
       “root”:“src”,
       “资产”:[
         “资产”,
        的“web.config”
         {
           //复制此文件夹中的内容
           “input”:“../”,
           //匹配这个通配符
           “glob”:“* .config”,
           //将它们放在`dist`下的文件夹中('。'表示直接放在`dist`中)
           “输出”:“。”
         }
       ]
       ...
     }
   ]
   ...
 }


[仅供档案]原创答案(2016年10月6日):

目前不支持这个function(截至beta-16)。 我向团队(web.config文件)提出了确切的关注,但似乎并没有很快发生(除非你正在分支CLI等)。

按照这个问题进行充分的讨论和未来可能的细节。

PS

对于JSON文件,你可以把它放在./src/assets/ 。 该文件夹被复制到./dist/assets/ 。 这是目前的行为。

在systemJS的早些时候,还有一个./public/文件夹被直接复制到./dist/ ,但是在Webpack版本中,这个问题已经消失了。

一个解决scheme(虽然在我看来有点破解)是在你的main.ts文件中声明一个variables,它需要你想包含在webpack编译输出中的额外文件。

EX:

 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中遇到这个variables声明语句时,它将会发出原始的web.config文件作为构build输出的一部分:

  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. 

一个理想的解决scheme将是在webpackconfiguration,但我不能正式或angular落clil.json是如何angular-cli.json (beta.16)。

所以,如果任何人有一个更好的答案,扩展了一个angular-cli生成项目的webpackconfiguration,我很想听到它。

angular-cli.json文件中有一个“脚本”部分。 你可以在那里添加所有的第三方JavaScript文件。