Angular加载配置文件

        在很多项目中,需要程序在启动时加载配置文件,根据配置参数运行程序。Angular单页应用中,可以在初始化方法(APP_INITIALIZER)中完成这一操作。

1、添加配置文件

        项目的配置文件一般都存放在静态目录中,可以在assets文件夹下新建一个config文件夹用于存放配置文件。可以为调试环境和部署环境分别保存配置文件。

2、添加service读取配置文件

        serve文件 app/core/services/config.service :

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { environment } from 'src/environments/environment';

@Injectable({
  providedIn: 'root'
})
export class ConfigService {

  constructor(private http: HttpClient) { }
  /**
   * 接口地址
   */
  static API_HOST: string;
  /**
   * 默认用户ID
   */
  static DEFAULT_USER_ID: string;
  /**
   * 读取配置文件
   */
  load() {
    const jsonFile = `assets/config/config.${environment.name}.json`;
    return new Promise<void>((resolve, reject) => {
      this.http.get<any>(jsonFile).subscribe(d => {
        ConfigService.API_HOST = d.apiHost;
        ConfigService.DEFAULT_USER_ID = d.defaultUserId;
        resolve();
      }, err => {
        reject(`load config error: ${err}`);
      })
    });
  }
}

export function loadConfig(appConfig: ConfigService) {
  return () => appConfig.load();
}

        以上代码中 const jsonFile = `assets/config/config.${environment.name}.json`; 根据程序运行环境加载不同的json文件,需要修改 environment 文件添加 name 字段。

        修改 src/environments/environment.ts :

export const environment = {
  name: "dev",
  production: false
};

        修改 src/environments/environment.prod.ts :

export const environment = {
  name: "prod",
  production: true
};

3、配置APP_INITIALIZER

        修改 app.module.ts,在 providers 中配置 APP_INITIALIZER,设置程序初始化的时候先执行加载配置的方法:

import { HttpClientModule } from '@angular/common/http';
import { APP_INITIALIZER, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { ConfigService, loadConfig } from './core/services/config.service';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    AppRoutingModule
  ],
  providers: [{ provide: APP_INITIALIZER, useFactory: loadConfig, deps: [ConfigService], multi: true }],
  bootstrap: [AppComponent]
})
export class AppModule { }

        完成以上步骤,程序启动时就能正确的加载配置文件。如以上示例,在项目别的页面ts文件中就可以直接使用 ConfigService.API_HOSTConfigService.DEFAULT_USER_ID 了。

Angular 使用 webpack 来构建和打包项目,webpack 配置文件默认情况下是隐藏的,使用 Angular CLI 提供的 `ng eject` 命令可以将默认的 webpack 配置文件转换为标准的 webpack 配置文件,并将所有依赖项添加到 `package.json` 文件中。下面是一个示例的 Angular webpack 配置文件及注释: ```javascript const path = require('path'); const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = { // 入口文件 entry: { 'polyfills': './src/polyfills.ts', 'app': './src/main.ts' }, // 输出文件 output: { path: path.resolve(__dirname, 'dist'), // 输出文件的名称 filename: '[name].[hash].js', // chunk 文件的名称 chunkFilename: '[id].[hash].chunk.js', // 配置资源文件的路径 publicPath: '/' }, // 模块加载器 module: { rules: [ // 处理 TypeScript 文件 { test: /\.ts$/, loaders: [ { loader: 'awesome-typescript-loader', options: { configFileName: path.resolve(__dirname, 'tsconfig.json') } } , 'angular2-template-loader' ] }, // 处理 HTML 文件 { test: /\.html$/, loader: 'html-loader' }, // 处理样式文件 { test: /\.css$/, exclude: path.resolve(__dirname, 'src', 'app'), loader: ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader?sourceMap' }) }, // 处理项目中的组件样式文件 { test: /\.css$/, include: path.resolve(__dirname, 'src', 'app'), loader: 'raw-loader' } ] }, // 插件 plugins: [ // 生成 HTML 文件 new HtmlWebpackPlugin({ template: 'src/index.html' }), // 配置全局变量 new webpack.DefinePlugin({ 'process.env': { 'NODE_ENV': JSON.stringify('production') } }), // 提取公共模块 new webpack.optimize.CommonsChunkPlugin({ name: ['app', 'polyfills'] }), // 提取样式文件 new ExtractTextPlugin('[name].[hash].css') ], // 解析模块请求的选项 resolve: { extensions: ['.ts', '.js'] }, // 配置 devServer devServer: { historyApiFallback: true, stats: 'minimal' }, // 配置 source map devtool: 'source-map' }; ``` 以上是一个基本的 Angular webpack 配置文件的示例,其中包括了入口文件、输出文件、模块加载器、插件、解析模块请求的选项、devServer 配置以及 source map 配置等等。注释中详细说明了每个配置项的作用和配置方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_老杨_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值