Skip to content

Commit 39d6d45

Browse files
fix: move to dotenv for environment configs (#35)
1 parent 5cd1c17 commit 39d6d45

File tree

10 files changed

+76
-15
lines changed

10 files changed

+76
-15
lines changed

package-lock.json

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"@nguniversal/common": "^6.0.0",
4747
"@nguniversal/express-engine": "^6.0.0",
4848
"@types/chalk": "^2.2.0",
49+
"@types/dotenv": "^4.0.3",
4950
"@types/favicons": "^5.1.0",
5051
"@types/iltorb": "^2.0.1",
5152
"@types/inquirer": "^0.0.42",
@@ -73,6 +74,7 @@
7374
"ajv": "^6.5.2",
7475
"chalk": "^2.4.1",
7576
"consolidate": "^0.15.1",
77+
"dotenv": "^6.0.0",
7678
"favicons": "^5.1.1",
7779
"fuse-box": "^3.3.0",
7880
"iltorb": "^2.3.2",

src/commands/create.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
import { load, commands } from 'npm'
3737
import generateTsConfig from '../generators/tsconfig.gen'
3838
import generateTsDeclartionFile from '../generators/declarations.gen'
39+
import generateDotEnv from '../generators/env.gen'
3940

4041
command(
4142
'create [overwrite]',
@@ -309,6 +310,7 @@ function create(overwriteExisting = false) {
309310
generateCoreAngular(im.config.fullname),
310311
generateGitIgnore(path, overwriteExisting),
311312
generateTsLint(path, overwriteExisting),
313+
generateDotEnv(path, overwriteExisting),
312314
generateFngConfig(path, overwriteExisting),
313315
generateTsConfig(path, overwriteExisting),
314316
generateTsDeclartionFile(path, overwriteExisting)

src/commands/serve.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@ import {
1313
import { resolve } from 'path'
1414
import { NgProdPlugin } from '../fusebox/ng.prod.plugin'
1515
import { NgPolyfillPlugin } from '../fusebox/ng.polyfill.plugin'
16-
import readConfig_ from '../utilities/read-config'
1716
import { Ng2TemplatePlugin } from 'ng2-fused'
1817
import { FuseProcess } from 'fuse-box/FuseProcess'
1918
import { NgAotFactoryPlugin } from '../fusebox/ng.aot-factory.plugin'
20-
import clearTerminal from '../utilities/clear'
2119
import { main as ngc } from '@angular/compiler-cli/src/main'
2220
import { CompressionPlugin } from '../fusebox/compression.plugin'
21+
import { appEnvironmentVariables } from '../utilities/environment-variables'
22+
import clearTerminal from '../utilities/clear'
23+
import readConfig_ from '../utilities/read-config'
2324

2425
command(
2526
'serve [port][prod][aot][sw]',
@@ -105,7 +106,6 @@ function serve(isProdBuild = false) {
105106
} as any),
106107
RawPlugin()
107108
],
108-
109109
isProdBuild &&
110110
QuantumPlugin({
111111
warnings: false,
@@ -126,7 +126,7 @@ function serve(isProdBuild = false) {
126126
output: `${serverOutput}/$name.js`,
127127
plugins: [
128128
EnvPlugin({
129-
FUSING_ANGULAR: JSON.stringify(config.environment)
129+
FUSING_ANGULAR: JSON.stringify(appEnvironmentVariables)
130130
}),
131131
JSONPlugin(),
132132
Ng2TemplatePlugin(),

src/generators/config.gen.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,7 @@ export default function generateFngConfig(path: string, overwrite = false) {
1010
resolve(path, configPath),
1111
{
1212
favicon,
13-
fusebox,
14-
environment: {
15-
name: 'DEVELOPMENT',
16-
server: {
17-
port: 5000
18-
},
19-
app: {}
20-
}
13+
fusebox
2114
},
2215
overwrite
2316
)

src/generators/env.gen.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { writeFileSafely_, writeFile_ } from '../utilities/rx-fs'
2+
import { resolve } from 'path'
3+
import * as env from '../templates/env.txt'
4+
5+
const configPath = '.env'
6+
7+
export default function generateDotEnv(dir: string, overwrite = false) {
8+
return overwrite
9+
? writeFile_(resolve(dir, configPath), env)
10+
: writeFileSafely_(resolve(dir, configPath), env)
11+
}

src/templates/core/server/server.app.ts.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { AppServerModule } from './server.angular.module'
66
import { stat, createReadStream } from 'fs'
77

88
const environment = JSON.parse(process.env.FUSING_ANGULAR || '{}')
9-
const isLocalDevelopmentServer = environment.name === 'DEVELOPMENT'
9+
const isLocalDevelopmentServer = environment.ENV === 'dev'
1010

1111
// const xhr2 = require('xhr2')
1212

src/templates/core/server/server.ts.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ import { expressApp } from './server.app'
44
const config = JSON.parse(process.env.FUSING_ANGULAR || '{}')
55
const server = createServer(expressApp)
66

7-
server.listen(config.server.port, () => {
8-
console.log(`Angular Universal server listening on port: ${config.server.port}`)
7+
server.listen(config.PORT, () => {
8+
console.log(`Angular Universal server listening on port: ${config.PORT}`)
99
})

src/templates/env.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
FNG_ENV=dev
2+
FNG_PORT=5000
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { config as readDotEnv } from 'dotenv'
2+
3+
export interface AppEnvironmentSettings {
4+
readonly PORT: number
5+
}
6+
7+
interface StringDictionary {
8+
readonly [key: string]: string
9+
}
10+
11+
const newEnv = readDotEnv()
12+
13+
function keysWihoutCorrectPrefix(prefix = 'FNG_') {
14+
return function(key: string) {
15+
return key.includes(prefix)
16+
}
17+
}
18+
19+
function toFngDictionaryObject(original: StringDictionary, prefix = 'FNG_') {
20+
return function(acc: Object, curr: string) {
21+
return {
22+
...acc,
23+
[curr.replace(prefix, '')]: original[curr]
24+
}
25+
}
26+
}
27+
28+
function cleanVars(dict = {}) {
29+
return Object.keys(dict)
30+
.filter(keysWihoutCorrectPrefix())
31+
.reduce(toFngDictionaryObject(dict), {})
32+
}
33+
34+
export const appEnvironmentVariables = {
35+
...cleanVars(process.env),
36+
...cleanVars(newEnv.parsed)
37+
} as AppEnvironmentSettings

0 commit comments

Comments
 (0)