2016-02-18 14 views
7

मैं वेबपैक के साथ अपनी परियोजना का निर्माण कर रहा हूं और परीक्षण चलाने के लिए कर्म का उपयोग कर रहा हूं।वेबपैक चलाने के लिए कर्म में NODE_ENV सेट करने का उचित तरीका क्या है?

मैं वेबमाक के लिए "परीक्षण" करने के लिए कर्मा को कॉन्फ़िगर करना चाहता हूं ताकि वेबपैक के लिए स्थानीय परीक्षण में मैप किए गए यूआरएल के साथ पर्यावरण परीक्षण के लिए परियोजना का सशर्त निर्माण करने के लिए "परीक्षण" किया जा सके, न कि उत्पादन डोमेन नाम।

उस उद्देश्य मैं Webpack के env-replace-loader है, जो अपने विन्यास फाइल environments.json पढ़ता है और इस तरह के रूप में API_URL चर,, process.env.NODE_ENV के मूल्यों के आधार पर सेट का उपयोग करने के लिए। उत्पादन निर्माण में मैं process.env.NODE_ENV सेट करने और वेबपैक शुरू करने के लिए गुलप का उपयोग करता हूं। यह काम करता हैं।

मैं परीक्षण निर्माण में process.env.NODE_ENV = 'test' सेट करना चाहता हूं, karma start karma.conf.js चलाकर शुरू किया गया। वर्तमान में मैं karma.conf.js में कहता हूं।

क्या ऐसा करने का कोई बेहतर तरीका है?


इसके अलावा, मैं webpack.config.js में webpack की DefinePlugin उपयोग करने के लिए इस तरह इस चर सेट करने की कोशिश की:

const webpackConfig = { 
    ... 
    plugins: [ 
     new webpack.DefinePlugin({ 
      process.env: {'NODE_ENV': 'test'} 
     }), 
     ... 
    ], 
    ... 
} 

और यह काम नहीं करेगा: webpack env-replace-loader शाप कि Module build failed: TypeError: Cannot read property 'URL' of undefined - मुझे लगता है, यह कर सकते हैं नोड रिपोर्टों तक पहुंच नहीं है कि यह

+1

'' '' '' '' प्रयास करें। ध्यान दें "यह सचमुच बदलता है, इसलिए यह बिना विफल हो जाएगा। 'JSON.stringify' एक और विकल्प होगा। –

उत्तर

8

आपकी वेबपैक कॉन्फ़िगरेशन में इसके बजाय JSON.stringify ('name') आज़माएं। इस तरह कुछ कोशिश करें:

plugins: [ 
    new webpack.DefinePlugin({ 
     'process.env': { 
      NODE_ENV: JSON.stringify('production'), 
      APP_ENV: JSON.stringify('browser') 
     }, 
    }) 
    ], 

यह वेबपैक के साथ उदाहरण या कुछ ऐसा चल रहा है। उदाहरण के लिए, मैं उदाहरण के दौरान सीएसएस की आवश्यकता के लिए इसका उपयोग कर रहा हूं लेकिन उत्पादन के लिए संकलन करते समय इसे अनदेखा कर दिया जाता है।

मुझे कर्म कॉन्फ़िगरेशन के साथ एक ही समस्या मिली है, लेकिन मैं प्लग कॉन्फ़िगरेशन फ़ाइल के वेबपैक भाग में प्लगइन जोड़ने को ठीक करता हूं। उदाहरण के लिए यह मेरी फाइल है:

const webpack = require('webpack'); 

module.exports = function(config) { 
    config.set({ 
    browsers: ['PhantomJS'], 
    files: [ 
     'tests.webpack.js', 
     { 
     pattern: 'src/**/__tests__/*.js', 
     included: false, 
     served: false, 
     watched: true 
     } 
    ], 
    frameworks: ['jasmine'], 
    preprocessors: { 
     'tests.webpack.js': ['webpack', 'sourcemap', 'coverage'], 
    }, 
    reporters: ['progress', 'notification'], 
    webpack: { 
     devtool: 'inline-source-map', 
     module: { 
     loaders: [ 
      { test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel-loader' } 
     ] 
     }, 
     plugins: [ 
     new webpack.DefinePlugin({ 
      'process.env': { 
       NODE_ENV: JSON.stringify('test') 
      } 
     }) 
     ], 
     watch: true 
    }, 
    webpackServer: { 
     noInfo: true, 
    } 
    }); 
}; 

मुझे आशा है कि यह आपके लिए भी सहायक होगा!

संबंधित मुद्दे