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

webpack可以轻松地公开模块的默认类而不是模块本身吗?

  •  0
  • futureal  · 技术社区  · 6 年前

    我试图通过webpack(在本例中是fusioncharts)将一个模块公开到全局范围,这样就可以通过页面内脚本直接访问它。我几乎可以一路走,但我还没能暴露 FusionCharts 直接初始化;相反,我获取模块本身 default: class FusionCharts 在里面。

    我的相关网页包配置如下:

    ...
    module: {
        rules: [
            ...,
            { test: /core\/index\.js$/, use: ['expose-loader?FusionCharts'] }
        ]
    },
    plugins: [
        new webpack.ProvidePlugin({
            ...,
            FusionCharts: ['fusioncharts/core', 'default']
        })
    ],
    ...
    

    然后我有一个 charts.js 在一个简单的例子中,文件如下:

    import Column2D from 'fusioncharts/viz/column2d';
    FusionCharts.addDep(Column2D);
    

    Webpack正确构建 图表.js 包含FusionCharts库的文件,页面上的脚本可以看到 融合图 变量,但它是模块而不是类。

    例如,页面可能有:

    <script src="/assets/charts.js"></script>
    ...
    <script>
        $(function() {
            // would output "FusionCharts: Module"
            console.log(FusionCharts);
    
            // would output "class FusionCharts" (which is what I am after)
            console.log(FusionCharts.default);
        });
    </script>
    

    是否可以像这样直接公开类?我想也许 expose-loader 有一种自动取消引用默认值的方法 ProvidePlugin 是的,但如果是的话,我找不到。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Zapdos13    6 年前

    要访问JS文件中的FusionCharts,需要导入FusionCharts模块才能访问所有FusionCharts属性和项,请检查此链接以供参考- https://www.fusioncharts.com/dev/api/fusioncharts#parameters-1

    另外,请检查此示例以了解详细信息- https://www.dropbox.com/s/4v5xqyxl66djr6y/fc%203.13.zip?dl=0