Mon application utilise NODE_ENV pour décider quel serveur api doit demander à.
NODE_ENV="production" => https://api.***/
NODE_ENV="staging" => https://api.staging-***/
NODE_ENV="development" => http://localhost:3000/
Je souhaite créer un paquet de stockage intermédiaire avec mode = "production", mais je garde NODE_ENV = "staging".
J'essaie de construire avec la configuration ci-dessous, mais bundle.js devient NODE_ENV = "production".
{
mode: "production",
plugins: [
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify("staging")
}
})
]
}
Je pense que vous souhaitez que votre build de mise en scène soit optimisé, tout comme votre build de production. Et pour autant que je sache, certaines bibliothèques (comme React ) vérifient si NODE_ENV === "production"
supprime certaines erreurs de traitement ou offre d'autres optimisations. Donc, si vous définissez NODE_ENV
sur staging
, ils "penseront" que c'est un environnement de développement.
Dans ce cas, je voudrais simplement utiliser une variable différente, telle que:
package.json
"scripts": {
"dev": "webpack-dev-server --config webpack.config.js --env.TARGET_ENV=development",
"staging": "webpack --config webpack.config.js --env.TARGET_ENV=staging",
"production": "webpack --config webpack.config.js --env.TARGET_ENV=production"
},
webpack.config.js
module.exports = (env) => {
const mode = env.TARGET_ENV === 'development' ? 'development' : 'production';
return {
mode: mode,
plugins: [
new webpack.DefinePlugin({
'process.env': {
'TARGET_ENV': JSON.stringify(env.TARGET_ENV)
}
})
]
// ...rest of config based on environment
};
};
Webpack-cli est obsolète et la syntaxe avec env ne fonctionne plus avec Webpack-command ( https://github.com/webpack-contrib/webpack-command#the---env-flag-is- nuked ).
Pour répondre à vos besoins, j’utiliserais une simple variable env et l’utiliserais de manière standard.
var API_URL = {
production: JSON.stringify('https://foo.bar/api'),
development: JSON.stringify('http://localhost:3000/api'),
staging: JSON.stringify('http://foo.stage.bar/api')
}
module.exports = function(argv) {
const TARGET = process.env.TARGET_ENV ? process.env.TARGET_ENV : 'development';
return {
mode: argv.mode ? argv.mode : 'development',
....
new webpack.DefinePlugin({
'API_URL': API_URL[TARGET]
}),
....
}
et appelez webpack comme ceci:
TARGET_ENV=staging webpack
De cette façon, vous trouveriez votre variable env API_URL définie globalement dans l'application.
J'éviterais de redéfinir NODE_ENV via le plugin define.