可变遮罩

时间:2018-12-28 21:04:52

标签: javascript variables bundle

我在这样的index.js文件中定义了一个类

const BLOG = BLOG || {};
BLOG.ComponentFactory =  class {
}
window.BLOG = BLOG;

然后,在捆绑包中的init.js文件中,我尝试访问该var,该文件就是这样

const BLOG = BLOG || {};
BLOG.init = function() {
    var c = new BLOG.ComponentFactory()
}

我得到BLOG.ComponentFactory is not a constructor,但我不明白为什么。文件init.js中的BLOG定义是否掩盖了全局变量?

有点奇怪:在init函数中使用Chrome调试器,我看到Blog.ComponentFactory定义在“全局”中,但是如果添加到要监视的属性中,我会看到Blog.ComponentFactory = undefined

我想了解发生了什么事。

我将ES6与旧的Javascritpt代码一起使用时,需要将BLOG定义为全局变量。

编辑:如果我使用以下代码,所有的方法都适用(init.js)

const BLOG = BLOG || {};
BLOG.init = function() {
    var c = new window.BLOG.ComponentFactory()
}

因此,似乎本地const BLOG正在掩盖全局BLOG var,但是我需要定义BLOG,因为否则我得到的BLOG是未定义的。那么,我该如何解决这个问题?

EDIT2 :我的webpack配置(问题在于捆绑,var是在捆绑时生成的函数中定义的)

const webpack = require('webpack');
const path = require('path');

var config = {
    module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: ['babel-loader']
      },
    ]
  },
    // workaround for
    // ERROR in ./node_modules/wpcom/build/lib/site.media.js
  //  Module not found: Error: Can't resolve 'fs' in '/node_modules/wpcom/build/lib'
    node: {
    fs: 'empty'
  },
  resolve: {
    extensions: ['*', '.js', '.jsx']
  },
    plugins: [
     new webpack.HotModuleReplacementPlugin()
 ]
};

var aConfig = Object.assign({}, config, {
    name: "a",
    entry: "./WebContent/js/blog/index.js",
    output: {
       path: __dirname + '/WebContent/js/blogW',
       filename: "bundle.js",
       publicPath: 'http://localhost:8080/js/blogW'
    },
    devServer: {
     historyApiFallback: true,
     contentBase: './WebContent',
     publicPath: "http://localhost:8080/js/blogW",
     hot: true
    }
});


module.exports = [
    aConfig
];

0 个答案:

没有答案