我在这样的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
];