2016-11-22 5 views
3

Ich habe eine Produktion mit Webpack bauen, die Knotens verwendet process.env Umgebungsvariablen zu setzen:Passing Variablen von NPM Scripts zu Webpack

webpack.prod.babel.js:

const DefinePlugin = new webpack.DefinePlugin({ 
    'process.env': { 
    NODE_ENV: JSON.stringify('production'), 
    API_URL: JSON.stringify('https://myprodurl.com'), 
    }, 
}); 

packge. json:

"scripts: { 
    "build:prod": "webpack" 
} 

Es funktioniert gut, aber ich brauche etwas unterscheiden ent.

Ich muss die Produktions-URL als Variable im NPM-Skript festlegen.

Anstatt also diese:

npm run build:prod 

Ich brauche dies:

npm run build:prod --URL https://myprodurl.com 

Antwort

7

Wie wäre Ihre Umgebungsvariable in der Befehlszeile zu definieren, wie:

URL=https://myprodurl.com npm run build:prod

Ich habe das mit einem einfachen Skript getestet und konnte denausdrucken.

"scripts": { 
    "test": "./myTest.js" 
}, 

myTest.js:

#!/usr/local/bin/node 

'use strict' 

console.log(process.env.URL); 
console.log('Done!'); 

dann:

$ URL=https://whatever.com npm run test 

> [email protected] test /Test/my-test 
> ./myTest.js 

https://whatever.com 
Done! 

EDIT: Wie @RyanZim erwähnt, wird die folgende für Windows finden Sie unter: https://github.com/kentcdodds/cross-env
(Disclaimer: I don‘ t benutze Windows und habe diese lib) noch nie probiert

+1

Sollte nach mention editiert werden Wenn Sie Windows-Unterstützung benötigen, müssen Sie https://github.com/kentcdodds/cross-env verwenden. – RyanZim

+1

Anstatt eine komplett neue Skriptdatei zu erstellen, können Sie Umgebungsvariablen einfach Ihrem 'npm run' Befehl voranstellen: '" build: prod ":" NODE_ENV = production webpack "' –

+0

Sie sind nah dran, aber Ihr Code sollte '' sein API_URL: JSON.stringify (process.env.URL), 'um die Frage richtig zu beantworten –