超级大侠 發表於 2020-8-4 21:33:00

angular打包优化

<p>打包生产环境时需要的配置如下:</p>
<h4>在angular.json里的“configurations”里配置:</h4>
<div class="cnblogs_code">
<pre>"configurations"<span style="color: rgba(0, 0, 0, 1)">: {
            </span>"production"<span style="color: rgba(0, 0, 0, 1)">: {
            </span>"fileReplacements"<span style="color: rgba(0, 0, 0, 1)">: [
                {
                  </span>"replace": "src/environments/environment.ts"<span style="color: rgba(0, 0, 0, 1)">,
                  </span>"with": "src/environments/environment.prod.ts"<span style="color: rgba(0, 0, 0, 1)">
                }
            ],
            </span>"optimization": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"outputHashing": "all"<span style="color: rgba(0, 0, 0, 1)">,
            </span>"sourceMap": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"extractCss": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"namedChunks": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"aot": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"extractLicenses": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"vendorChunk": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"buildOptimizer": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"budgets"<span style="color: rgba(0, 0, 0, 1)">: [
                {
                  </span>"type": "initial"<span style="color: rgba(0, 0, 0, 1)">,
                  </span>"maximumWarning": "3mb"<span style="color: rgba(0, 0, 0, 1)">,
                  </span>"maximumError": "5mb"<span style="color: rgba(0, 0, 0, 1)">
                }
            ]
            },
            </span>"devops"<span style="color: rgba(0, 0, 0, 1)">: {
            </span>"fileReplacements"<span style="color: rgba(0, 0, 0, 1)">: [
                {
                  </span>"replace": "src/environments/environment.ts"<span style="color: rgba(0, 0, 0, 1)">,
                  </span>"with": "src/environments/environment.devops.ts"<span style="color: rgba(0, 0, 0, 1)">
                }
            ],
            </span>"optimization": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"outputHashing": "all"<span style="color: rgba(0, 0, 0, 1)">,
            </span>"sourceMap": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"extractCss": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"namedChunks": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"aot": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"extractLicenses": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"vendorChunk": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"buildOptimizer": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
            </span>"budgets"<span style="color: rgba(0, 0, 0, 1)">: [
                {
                  </span>"type": "initial"<span style="color: rgba(0, 0, 0, 1)">,
                  </span>"maximumWarning": "3mb"<span style="color: rgba(0, 0, 0, 1)">,
                  </span>"maximumError": "5mb"<span style="color: rgba(0, 0, 0, 1)">
                }
            ]
            }
          }
      },</span></pre>
</div>
<h5>其中的配置项解释(参考官方文档):</h5>
<p>配置针对特定目标的文件替换规则<br>CLI 的主配置文件 angular.json 中的每个构建目标下都包含了一个 fileReplacements 区段。这能让你把任何文件替换为针对特定目标的版本。 当构建目标需要包含针对特定环境(比如生产或预生产)的代码或变量时,这非常有用。</p>
<p>默认情况下不会替换任何文件。 你可以为特定的构建目标添加文件替换规则。比如:</p>
<div class="cnblogs_code">
<pre>"configurations"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"production"<span style="color: rgba(0, 0, 0, 1)">: {
    </span>"fileReplacements"<span style="color: rgba(0, 0, 0, 1)">: [
      {
      </span>"replace": "src/environments/environment.ts"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"with": "src/environments/environment.prod.ts"<span style="color: rgba(0, 0, 0, 1)">
      }
    ],
    ...</span></pre>
</div>
<div class="cnblogs_code">
<pre>"optimization": <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">启用构建输出的优化。</span>
    "outputHashing": "all",<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义输出文件名缓存消除哈希模式。</span>
    "sourceMap": <span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">会使打包变慢</span>
    "extractCss": <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">从全局样式中将css提取到css文件而不是js文件中。</span>
    "namedChunks": <span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将文件名用于延迟加载的块。</span>
    "aot": <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否采用aot预编译模式</span>
    "extractLicenses": <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将所有许可证提取到一个单独的文件中。</span>
    "vendorChunk": <span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">使用仅包含供应商库的单独捆绑包。</span>
    "buildOptimizer": <span style="color: rgba(0, 0, 255, 1)">true</span>,<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   Enables '@angular-devkit/build-optimizer' optimizations when using the 'aot' option.</span></pre>
</div>
<p>&nbsp;</p>
<p>配置文件大小预算<br>当应用的功能不断增长时,其文件大小也会同步增长。 CLI 允许你通过配置项来限制文件大小,以确保应用的各个部分都处于你定义的大小范围内。</p>
<p>你可以在 CLI 配置文件 angular.json 的 budgets 区段为每个所配置的环境定义这些大小范围。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
...
</span>"configurations"<span style="color: rgba(0, 0, 0, 1)">: {
    </span>"production"<span style="color: rgba(0, 0, 0, 1)">: {
      ...
   </span>"budgets"<span style="color: rgba(0, 0, 0, 1)">: []
    }
}
}</span></pre>
</div>
<p>你可以为整个应用指定大小范围,也可以为特定部分。 每个条目会为一种特定的类型配置大小范围。 用下列各式来指定大小的值:</p>
<p>123 或 123b:以字节为单位的大小</p>
<p>123kb:以 kb 为单位的大小</p>
<p>123mb:以 mb 为单位的大小</p>
<p>12%:相对于基准大小的百分比大小。(不能用作基准大小的值。)</p>
<p>如果配置了大小范围,构建系统就会在发现应用的某个部分达到或超过了你设置的大小范围时发出警告或报错。</p>
<p>每个范围条目是一个 JSON 对象,它具有下列属性:</p>
<table>
<thead>
<tr><th>属性</th><th>值</th></tr>
</thead>
<tbody>
<tr>
<td>type</td>
<td>限制的类型。有效值为:bundle – 特定包的大小。 initial – 应用的初始大小。allScript – 所有脚本的总大小。all – 整个应用的总大小。anyScript – 任何一个脚本的大小。any – 任何一个文件的大小。</td>
</tr>
<tr>
<td>name</td>
<td>要限制的包的名字(当 type=bundle 时)。</td>
</tr>
<tr>
<td>baseline</td>
<td>一个表示基准大小的绝对值,用做比例值的基数。</td>
</tr>
<tr>
<td>maximumWarning</td>
<td>当大小超过基线的这个阈值百分比时给出警告。</td>
</tr>
<tr>
<td>maximumError</td>
<td>当大小超过基线的这个阈值百分比时报错。</td>
</tr>
<tr>
<td>minimumWarning</td>
<td>当大小小于基线的这个阈值百分比时给出警告。</td>
</tr>
<tr>
<td>minimumError</td>
<td>当大小小于基线的这个阈值百分比时报错。</td>
</tr>
<tr>
<td>warning</td>
<td>当大小达到或小于基线的这个阈值百分比时都给出警告</td>
</tr>
<tr>
<td>error</td>
<td>当大小达到或小于基线的这个阈值百分比时都报错</td>
</tr>
</tbody>
</table>
<h4>在src/environments文件夹下建不同环境的配置文件,配置项目所需要的环境变量即可,如下图:</h4>
<div class="cnblogs_code">
<pre>export const environment =<span style="color: rgba(0, 0, 0, 1)"> {
production: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
baseUrl: </span>'https://witest.cndhl.com/v2'<span style="color: rgba(0, 0, 0, 1)">
};</span></pre>
</div>
<h4>在package.json文件里可以配置打包命令:</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"name": "dhl_pc"<span style="color: rgba(0, 0, 0, 1)">,
</span>"version": "0.0.0"<span style="color: rgba(0, 0, 0, 1)">,
</span>"scripts"<span style="color: rgba(0, 0, 0, 1)">: {
    </span>"ng": "ng"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"start": "ng serve --proxy-config proxy.conf.json"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"build": "ng build"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"build-devops": "ng build --configuration=devops"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"build-dhl": "ng build --configuration=production --base-href /v2/"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"test": "ng test"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"lint": "ng lint"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"e2e": "ng e2e"<span style="color: rgba(0, 0, 0, 1)">
},</span></pre>
</div>
<p>打包生产环境可以用命令: npm run build-dhl 即可。</p><br><br>
来源:https://www.cnblogs.com/liyfya/p/13436081.html
頁: [1]
查看完整版本: angular打包优化