代码之家  ›  专栏  ›  技术社区  ›  cdarwin

可变掩蔽

  •  0
  • cdarwin  · 技术社区  · 7 年前

    我在index.js文件中定义了一个类,如下所示

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

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

    我明白了 BLOG.ComponentFactory is not a constructor 我不明白为什么。文件init.js中的博客定义是否屏蔽了全局变量?

    我想知道发生了什么事。

    我需要将BLOG定义为一个全局变量,因为我正在使用ES6和旧的javascritpt代码。

    编辑 :如果我使用以下代码,则所有代码都有效(init.js)

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

    所以,看起来本地const BLOG屏蔽了全局BLOG变量,但是我需要定义BLOG,因为否则我得到的BLOG是未定义的。那么,我该如何解决这个问题呢?

    编辑2

    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 回复  |  直到 7 年前