2017-03-08 65 views
1

如何在構建期間訪問環境變量的值以便執行一些字符串替換。如何在構建期間訪問環境變量

實施例:

aurelia_project /環境/ dev.ts

export default { 
    debug: true, 
    testing: true, 
    pageBaseUrl: 'https://localhost:9000' // <-- This is the info I'd like to fetch 
}; 

aurelia_project /環境/ prod.ts

export default { 
    debug: true, 
    testing: true, 
    pageBaseUrl: 'https://www.foobar.com' // <-- This is the info I'd like to fetch 
}; 

的index.html

<!DOCTYPE html> 
<html> 
<head> 
    <!-- ... --> 
    <base href="{pageBasePath}"> 
    <!-- ... --> 
</head> 
<!-- ... --> 
</html> 

aurelia_project /任務/ processIndex.ts

// ... 
export default function processIndex() { 
    const pageBasePath = CLI.getEnvParamValue('pageBasePath'); 

    return gulp.src('index.html') 
     .pipe(replace('{pageBasePath}', pageBasePath)) 
     .pipe(gulp.dest(project.platform.outputIndex)); 
} 

有一些內置等同於我的虛構CLI.getEnvParamValue('pageBasePath');processIndex.ts還是必須從內部aurelia_project/environments相應的文件手動讀取這些相關信息(使用CLIOptions.getEnvironment())?

回答

1

我已經成功通過適當的環境文件中手動解析所需要的信息來解決這個問題:

let project = require('../aurelia.json'); 
import * as replace from 'gulp-replace'; 
import * as gulp from 'gulp'; 
import {CLIOptions} from 'aurelia-cli'; 
import * as fs from 'fs'; 

export default function processIndex() { 
    const env = CLIOptions.getEnvironment(); 
    const envContent = fs.readFileSync(`aurelia_project/environments/${env}.ts`, 'utf8'); 
    const pageBaseUrl = /pageBaseUrl: '(.*)'/ig.exec(envContent)[1]; 

    return gulp.src('index.html') 
     .pipe(replace('{pageBaseUrl}', pageBaseUrl)) 
     .pipe(gulp.dest(project.platform.outputIndex)); 
} 

因爲這感覺相當哈克,我還是欣賞更好的選擇!

+0

我知道我把導入環境變成了一個吞噬任務。夥計,這救了我......很高興你有代碼想通了! – chdev77