Webpack:尝试将捆绑的对象公开以供其他脚本使用,但该对象仍未定义

时间:2018-08-03 01:09:52

标签: javascript reactjs webpack jsx

我正在尝试简化基础知识,将jsx文件转换为js。但是,我的转译代码需要由非转译代码调用。 output.library应该可以帮助您解决此问题。

在生成的包中,我看到了var react的定义。但是就在逐步浏览完整个捆绑包之后,很明显,仍然没有做出反应。

我的webpack.config.js

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

module.exports = {
    entry: "./public/js/ui/react/dialog.jsx",
    output: {
        path: path.resolve(__dirname, "public/js/ui/react/"),
        filename: "bundle.js",
        libraryTarget: "var",
        library: "react"
    },
    resolve: {
        extensions: ['.js', '.jsx']
    },
    module: {
        rules: [
            {
                test: /\.jsx$/,
                loader: 'babel-loader',
                exclude: [
                  path.resolve(__dirname, "node_modules/")
                ],
                query: {
                    presets: ['es2015', "react"]
                }
            }
        ]
    },
    node: {
       fs: "empty"
    }
}

和我要转换的jsx:

'use strict';

react.Dialog = class extends React.Component {
    render() {
        return (
            <div class="bubble-speech">Hello World</div>
        )
    }
}

在我的代码的其他地方,以及在捆绑包之前,我都有这个,所以react.Dialog分配不是空引用错误:

var react = {};

如果我把那一行拿走,bundle.js将在尝试分配react.Dialog时抛出错误。但是,如果我将其保留,则var react仍设置为空对象。这似乎是一个矛盾!我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

我认为应将react设置为外部定义的全局变量,如下所示:

{
    output: {
        // export itself to a global var
        libraryTarget: "var",
        // name of the global var: "Foo"
        library: "Foo"
    },
    externals: {
        // require("react") is external and available
        //  on the global var React
        "react": "React"
    }
}