Webpacked ReactJSアプリケーションが動作する現在の環境(開発、生産、テスト、またはデプロイメント)を定義するグローバル環境変数を設定します。しかし、環境変数__ENV__
にアクセスしようとすると、この非常に奇妙なエラーが発生します。JSグローバルが評価でクラッシュする
次のような類似のコードはすべて、同じエラー(Uncaught ReferenceError: deployment is not defined
)で失敗します。展開は__ENV__
で、ref名ではありません。私がそれを与える価値に関係なく同じことが起こります。ここでは三つのサンプルです:
console.log(process.env.NODE_ENV);
global.__ENV__ = process.env.NODE_ENV || 'development';
console.log(__ENV__); // crashes here otherwise crashes at next line
global.__PROD__ = __ENV__ == 'production';
global.__DEPLOY__ = __ENV__ == 'deployment';
global.__DEV__ = __ENV__ == 'development';
global.__TEST__ = __ENV__ == 'test';
console.log(process.env.NODE_ENV);
window.__ENV__ = process.env.NODE_ENV || 'development';
console.log(__ENV__); // crashes here otherwise crashes at next line
window.__PROD__ = __ENV__ == 'production';
window.__DEPLOY__ = __ENV__ == 'deployment';
window.__DEV__ = __ENV__ == 'development';
window.__TEST__ = __ENV__ == 'test';
console.log(process.env.NODE_ENV);
window.__ENV__ = process.env.NODE_ENV || 'development';
console.log(`${__ENV__}`); // crashes here otherwise crashes at next line
window.__PROD__ = `${__ENV__}` == 'production';
window.__DEPLOY__ = `${__ENV__}` == 'deployment';
window.__DEV__ = `${__ENV__}` == 'development';
window.__TEST__ = `${__ENV__}` == 'test';
がさえ奇妙は、このアプローチが代わりに動作します:
const __ENV__ = process.env.NODE_ENV || 'development';
console.log(__ENV__);
global.__PROD__ = __ENV__ === 'production';
global.__DEPLOY__ = __ENV__ === 'deployment';
global.__DEV__ = __ENV__ === 'development';
global.__TEST__ = __ENV__ === 'test';
マイWebPACKの構成は次のものが含まれます。
config.globals = {
'process.env': {
'NODE_ENV': JSON.stringify(config.env)
},
'__ENV__': config.env,
'__DEPLOY__': config.env === '"deployment"',
'__DEV__': config.env === '"development"',
'__PROD__': config.env === '"production"',
'__TEST__': config.env === '"test"'
};
webpack_config.plugins.push(
new webpack.DefinePlugin(config.globals)
);
これが事である理由を任意のアイデア?
これが助けになる可能性がある場合、私のコードベースはstage-0の提案が有効になっているES2015から切り離され、Webpackを使用して単一のバンドルとして出荷されます。
あなたの最初の7行はnodejs v6.9.2でうまく動作します。あなたが記述したエラーが発生したときに、それを実行していますか? – jfriend00
これはChromeの最新バージョン(58.0.3029.81(64ビット)) –