Globals在进口来源中未定义,但在所需来源中工作

时间:2016-07-02 21:08:02

标签: javascript webpack babeljs

感谢您对此事的考虑!在过去的几天里,我一直在搜索SO,GH和其他任何我能想到的关于这个问题的任何线索。希望它实际上是一个问题。

鉴于我的webpack条目来源:

global.val = 'some-value';

// 1) Global variables work just fine when the source is require'd
require('./second');

// 2) Global variables don't seem to be available when the source is imported
//   Results in: ReferenceError: val is not defined
import './second';

我的第二个源文件只是记录该值:

console.log(val);

如果导入second.js,则val未定义。如果需要,val设置为“某个值”'应该如此。我无法找到任何有关此行为的解释。

webpack.config.js

const webpack = require('webpack');

module.exports = {
  output: {
    filename: 'main.js',
    publicPath: '/'
  },
  module: {
    loaders: [{
      test: /\.jsx?$/,
      exclude: /(node_modules|bower_components)/,
      loader: 'babel-loader',

      query: {
        presets: ['es2015','react']
      }
    }]
  },
  devtool: 'source-map'
};

版本:

  • Webpack:1.12.9
  • Babel:6.0.0

我通过Babel服务器端运行完全相同的代码没有问题,但是当我通过Webpack运行它并在客户端服务器时,我最终遇到了这个问题。我已经连续几天在这个问题上踢自己了。非常感谢您提供的任何帮助!如果您需要更多信息,请告诉我们!

谢谢!

1 个答案:

答案 0 :(得分:1)

这是预期的行为,我希望Babel做同样的事情。在执行模块主体之前处理import语句,所以

global.val = 'some-value';
import './second';

的行为就像

import './second';
global.val = 'some-value';

如果您真的想这样做,则需要将全局分配移动到自己的模块中,例如

import './initialize-globals';
import './second';