首页 前端知识 Angular实现一次打包,外部修改环境配置。

Angular实现一次打包,外部修改环境配置。

2024-08-08 23:08:03 前端知识 前端哥 969 648 我要收藏

Angular实现一次打包,外部修改环境配置。

1 新建环境配置

在这里插入图片描述

2 修改angular.json打包配置,把配置环境独立打包出来。

"assets": [
              "src/favicon.ico",
              "src/assets",
              "src/lib",
              {
                "glob": "**/*",
                "input": "./node_modules/@ant-design/icons-angular/src/inline-svg/",
                "output": "/assets/"
              },
              {
                "glob": "**/*",
                "input": "./node_modules/pspdfkit/dist/pspdfkit-lib/",
                "output": "./assets/pspdfkit-lib/"
              }
            ],

3 main.ts读取配置json,将配置项写入window.__env,(这里只有在生产环境读取外部配置)。

function getEnv() {
  const configUrl = `./lib/config/config.prod.json`;
  const xhr = new XMLHttpRequest();
  xhr.open('GET', configUrl, false);
  xhr.onload = () => {
    if (xhr.status === 200 && xhr.readyState === 4) {
      window['__env'] = Object.freeze(JSON.parse(xhr.response));
    } else {
      window['__env'] = Object.freeze({
        status: 'error',
        errorMsg: '读取配置文件失败'
      });
    }
  };
  xhr.send();
}


if (environment.production) {
  enableProdMode();
  window.console.log = () => { };
  window.console.debug = () => { };
  getEnv();
}

4 将window.__env中的配置项写入service。

env.service.ts

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class Environment {
  production = false;
  installation = '';
  uiManageUrl = ''
  apiTimeout = 10000;
  universalServerUrl = '';
  universalToken = '';
  uiDBCache = false;

  constructor() { }
}

env.service.provider.ts

import { environment } from 'src/environments/environment';
import { Environment } from './env.service';

export const EnvServiceFactory = () => {
  let env;
  if (environment.production) {
    env = new Environment();
 
    const browserWindow = window || {};
    const browserWindowEnv = browserWindow['__env'] || {};
    if (browserWindowEnv) {
      for (const key in browserWindowEnv) {
        if (browserWindowEnv.hasOwnProperty(key)) {
          env[key] = window['__env'][key];
        }
      }
    }
  } else {
    env = environment;
  }
  return env;
};

export const EnvServiceProvider = {
  provide: Environment,
  useFactory: EnvServiceFactory,
  deps: [],
};

5 在app.module.ts providers里面注册该服务。

providers: [
    { provide: NZ_I18N, useValue: zh_CN },
    EnvServiceProvider
]

6 组件中使用

引入env.service
import { Environment } from 'src/app/services/env/env.service';
constructor(
    public env: Environment
) { }
ngOnInit() {
    this.installation = this.env.installation;
 }

7 总结

有些内容出于项目原因不能贴出来,完全按照以上的步骤写可能会有部分小问题,但这个解决办法的总体思路是这样的,希望对你有所帮助。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/15094.html
标签
angular.js
评论
发布的文章

安装Nodejs后,npm无法使用

2024-11-30 11:11:38

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!