-
-
Save rossholdway/16724496806b66a162ee6cbf8bfc5def to your computer and use it in GitHub Desktop.
| #!/usr/bin/env node | |
| var path = require('path'); | |
| var process = require('process'); | |
| var fs = require('fs'); | |
| class Environment { | |
| constructor(args) { | |
| args = JSON.parse(args).original; | |
| const defaultEnv = 'development'; //Set default environment | |
| let env; | |
| if(args.includes('ionic:build')) { | |
| let envFlags = args.filter((arg) => arg.includes("--env")); | |
| env = (envFlags.length === 1) ? envFlags[0].substr(envFlags[0].indexOf("=") + 1) : defaultEnv; | |
| } else { | |
| let index = args.indexOf('--env'); | |
| env = (index > -1) ? args[index+1] : defaultEnv; | |
| } | |
| console.log(`Using environment config: ${env}`); | |
| this.setEnvironment(env); | |
| } | |
| setEnvironment(env) { | |
| let config; | |
| try { | |
| config = require(path.join('../', '.env', env + '.json')); | |
| } catch(e) { | |
| throw new Error(`The config file for this environment is missing (${e.message})`); | |
| } | |
| var wstream = fs.createWriteStream(path.resolve('./src/app/app.config.ts')); | |
| wstream.write(` | |
| import { OpaqueToken } from "@angular/core"; //Use InjectionToken in Angular 4.x | |
| export let APP_CONFIG = new OpaqueToken("app.config"); | |
| export const AppConfig = ${JSON.stringify(config)}; | |
| `); | |
| wstream.end(); | |
| } | |
| } | |
| new Environment(process.env.npm_config_argv); |
@kukukk @gabrielalack @JWesorick Thanks for the comments 👍
I've updated the script to use args.includes('ionic:build') and added path.resolve() too.
Hey @rossholdway,
Thanks for the code, it worked quite well for the default environment. However, I'm having troubles getting the --env= parameter to work when running ionic serve or build. It always defaults to development. I've tried logging process.env and process.argv to check to see whether the parameter was available elsewhere but had no luck.
Here's what I ran:
ionic serve --env=staging
Here are my scripts:
"ionic": "./node_modules/.bin/ionic",
"clean": "ionic-app-scripts clean",
"build": "ionic-app-scripts build",
"ionic:build:before": "node ./scripts/environment",
"ionic:build": "ionic-app-scripts build",
"ionic:watch:before": "node ./scripts/environment",
"ionic:serve": "ionic-app-scripts serve"
Any suggestions?
Update
I was able to access the environment variable by adding it directly to "ionic:watch:before": "node ./scripts/environment --env=staging" but outside of that I've been unable to access that.
@sklink Thanks for the update.
I've also recently discovered this and I think it's been caused by upgrading ionic cli / app scripts. Your update sounds like a good workaround, thanks.
I'll look into getting this working again with the --env= flag directly.
@rossholdway any updates on this? Did you get this working again with the --env= flag?
As another option, I changed my constructor to use environment variables.