王义云 發表於 2019-5-5 12:33:00

为什么angular library的build不能将assets静态资源打包进去(转)

<h3>Versions</h3>
<pre><code>Angular CLI: 6.0.7
Node: 9.3.0
OS: darwin x64
Angular: 6.0.3
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Package                            Version
------------------------------------------------------------
@angular-devkit/architect          0.6.7
@angular-devkit/build-angular      0.6.7
@angular-devkit/build-ng-packagr   0.6.7
@angular-devkit/build-optimizer    0.6.7
@angular-devkit/core               0.6.7
@angular-devkit/schematics         0.6.7
@angular/cdk                     6.2.0
@angular/cli                     6.0.7
@angular/material                  6.2.0
@ngtools/json-schema               1.1.0
@ngtools/webpack                   6.0.7
@schematics/angular                0.6.7
@schematics/update               0.6.7
ng-packagr                         3.0.0
rxjs                               6.2.0
typescript                         2.7.2
webpack                            4.8.3
</code></pre>
<h3>Repro steps</h3>
<ul>
<li>Create a library&nbsp;<code>@acme/lib1</code>&nbsp;using&nbsp;<code>ng generate library @acme/lib1</code></li>
<li>Create assets folder under&nbsp;<code>projects/acme/lib1/assets</code>&nbsp;and add images</li>
<li>Add a&nbsp;<code>"projects" -&gt; "@acme/lib1" -&gt; "architect" -&gt; "build" -&gt; "options" -&gt; "assets"</code>&nbsp;key to the library's config within&nbsp;<code>angular.json</code>&nbsp;file.</li>
<li>Build library using&nbsp;<code>ng build @acme/lib1</code></li>
<li>Fail error should show and none of the assets will be copied to&nbsp;<code>dist</code>&nbsp;folder.</li>
</ul>
<h3>Observed behavior</h3>
<p>Upon building &amp; packaging an Angular 6 library e.g.&nbsp;<code>@acme/lib1</code>&nbsp;using&nbsp;<code>ng build @acme/lib1</code>, the Angular CLI does not copy the library's assets into the&nbsp;<code>dist/acme/lib1/assets</code>&nbsp;folder. This happens also when using the&nbsp;<code>--prod</code>&nbsp;flag.</p>
<p>The CLI seems to only support copying the root app's assets but not library specific assets.<br>When trying to add&nbsp;<code>"assets": ["src/assets"]</code>&nbsp;to project&nbsp;<code>@acme/lib1</code>&nbsp;within&nbsp;<code>angular.json</code>, the following error appears in the command line:</p>
<blockquote>
<p>Schema validation failed with the following errors: Data path "" should NOT have additional properties(assets).</p>

</blockquote>
<p>When creating the following custom rule to copying the files on&nbsp;<code>ng build</code>:</p>
<pre><code> "assets": [
    "src/favicon.ico",
    "src/assets",
   { "glob": "**/*", "input": "src/assets", "output": "../acme/lib1/assets/" }
],
</code></pre>
<p>I get the following error:</p>
<blockquote>
<p>An asset cannot be written to a location outside of the output path.</p>
</blockquote>
<p>While it is possible to work around this issue using other command line tools/scripts, it will be more consistent to add support for library's assets copy as well.</p>
<h3>Desired behavior</h3>
<p>Use Case<br>Very often libraries include image files, icons, css files and other static files which are needed to be distrubted with the package.</p>
<p>What would like to see implemented?<br>Add ability to define a library specific&nbsp;<code>assets</code>&nbsp;property within&nbsp;<code>angular.json</code>.<br>Example -</p>
<pre><code>"@acme/lib1": {
      "root": "projects/acme/lib1",
      "sourceRoot": "projects/acme/lib1/src",
      "projectType": "library",
      "prefix": "lib",
      "architect": {
      "build": {
          "builder": "@angular-devkit/build-ng-packagr:build",
          "options": {
            "tsConfig": "projects/acme/lib1/tsconfig.lib.json",
            "project": "projects/acme/lib1r/ng-package.json",
            "assets": [ // &lt;--------- this is currently not supported
            "src/assets"
            ]
          },
...}
</code></pre>
<p>What did you expect to see?<br>Project's specific assets should be copied from&nbsp;<code>projects/acme/lib1/src/assets</code>&nbsp;into&nbsp;<code>dist/acme/lib1/assets</code>.</p>
<h3>Mention any other details that might be useful (optional)</h3>
<p>&nbsp;</p>
<p>原文地址:https://github.com/angular/angular-cli/issues/11071</p><br><br>
来源:https://www.cnblogs.com/princesong/p/10812314.html
頁: [1]
查看完整版本: 为什么angular library的build不能将assets静态资源打包进去(转)