Estoy usando webpack.DefinePlugin con una configuración realmente simple para configurar una var de cliente frente a servidor:
new webpack.DefinePlugin({ __CLIENT__: JSON.stringify(false), }) Cuando ejecuto esto sobre el siguiente archivo, solo reemplaza uno de los dos usos de __CLIENT__ :
export const CLIENT = __CLIENT__; export const processEnv = __CLIENT__ ? null : process.env; // === compiles to the following: ===> export const CLIENT = false; export const processEnv = __CLIENT__ ? null : process.env; // __CLIENT__ doesn't get replaced.Cuando cambio la segunda línea para que tenga otra cosa que no sea process.env, funciona bien.
export const CLIENT = __CLIENT__; export const processEnv = __CLIENT__ ? null : 'works!'; // === compiles to the following: ===> export const CLIENT = false; export const processEnv = false ? null : 'works!'; // __CLIENT__ gets replaced. Puedo solucionar este problema de manera bastante trivial guardando primero __CLIENT__ en alguna otra variable como la siguiente, pero me hace desconfiar por completo de webpack.DefinePlugin para usos futuros.
export const CLIENT = __CLIENT__; export const processEnv = CLIENT ? null : process.env; // === compiles to the following: ===> export const CLIENT = false; export const processEnv = false ? null : process.env; // Works, compiles fine. Quizás aún más extraño, parece un paquete web. webpack.DefinePlugin se preocupa por el valor que estoy configurando. Esta compilación correctamente:
new webpack.DefinePlugin({ __CLIENT__: JSON.stringify(true), // Instead of false }) ... // Same code as initial example: export const CLIENT = __CLIENT__; export const processEnv = __CLIENT__ ? null : process.env; // === compiles to the following: ===> export const CLIENT = true; export const processEnv = true ? null : 0; // Works, compiles fine. ¿Por qué a webpack.DefinePlugin importa cuál es mi valor de reemplazo? ¿Estoy haciendo algo mal? ¿Hay alguna otra configuración que deba cambiar?