【发布时间】:2016-01-13 06:00:58
【问题描述】:
所以我试图将捆绑包中的所有 React 组件公开给浏览器的全局 (window)。我正在使用 webpack 的 expose-loader 这样做。
我在公开普通 JS 模块方面取得了圆满成功,但是当我尝试公开 JSX 模块时,它给了我一个错误:
Module parse failed: ~/project/src/components/list.jsx Line 20: Unexpected token <
You may need an appropriate loader to handle this file type.
...
该错误仅针对使用expose 的第三个加载程序条目显示。如果删除了该 loader 条目,React 组件就可以正常构建。
这是 webpack 配置文件:
module.exports = {
entry: "./src/components/index.js",
output: {
filename: "bundle.js",
path: __dirname + "/web"
},
module: {
loaders: [
{
test: /\.jsx$/,
exclude: /node_modules/,
loaders: ["babel-loader?presets[]=react,presets[]=es2015"],
},
{
test: require.resolve("react"),
loader: "expose?React"
},
{
test: /list.jsx$/,
loaders: ["babel-loader?presets[]=react,presets[]=es2015", "expose?List"]
}
]
}
};
我曾尝试在expose 加载程序之前使用babel-loader 来尝试修复错误但没有运气,同样的错误。以前有没有人成功地使用 webpack 在全球范围内公开 React 组件。
【问题讨论】:
-
react 预设是否定义在 .babelrc 中?
-
@arve0 是的,
es2015和reactpresets。 -
@arve0 预设的顺序如下:
es2015,然后是react。 -
@arve0 同样的错误。顺便说一句,React 组件构建得很好,只有当我使用
expose时才会出现错误。