5 javascript ecmascript-6 webpack babeljs
我使用的WebPack与babel-loader
以transpile我ES6/JSX,它会分成服务器和客户端捆绑:
//components/CustomerView.jsx
export default class CustomerView extends React.Component {
render() {
...
}
}
//components/index.js
import CustomerView from './CustomerView.jsx'
export {CustomerView}
//client.js
var Components = require('expose?Components!./components');
//webpack.config.js (loader section)
{
test: /.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015', 'react']
}
}
Run Code Online (Sandbox Code Playgroud)
上面的工作,但基于这里的Syntax
部分中的示例,其中提到babel支持它,所以我假设我可以编写类似下面的内容,但它不起作用:
export CustomerView from './CustomerView.jsx'
Run Code Online (Sandbox Code Playgroud)
此外,如果类不是默认导出类,它也不起作用:
export class CustomerView extends React.Component {
render() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我没有从webpack中得到任何错误,它创建了捆绑包但是当我运行它时我得到了Could not find a component named 'Components.CustomerView'
,所以出于某种原因,除非它是默认导出,否则看起来expose-loader
要创建Components
全局,或者不附加CustomerView
到它...任何想法?
小智 4
我应该做什么:
将导出值包含在{}
:
export {CustomerView} from './CustomerView.jsx'
Run Code Online (Sandbox Code Playgroud)
我感到困惑的原因:
CustomerView
仅当该类是默认导出时才有效:
import CustomerView from './CustomerView.jsx'
Run Code Online (Sandbox Code Playgroud)
当没有默认类导出时,需要用花括号包裹起来,否则不起作用:
import {CustomerView} from './CustomerView.jsx'
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,babel-loader
当有默认类导出时不会编译它:
export CustomerView from './CustomerView.jsx'
Run Code Online (Sandbox Code Playgroud)
或这个
import CustomerView from './CustomerView.jsx'
export CustomerView
Run Code Online (Sandbox Code Playgroud)
编译了两个的组合,但给了我错误could not find a component
(这是react.net预渲染),除非我在 中设置默认类导出CustomerView.jsx
,我猜这意味着它链接到此导入/导出:
import CustomerView from './CustomerView.jsx'
export {CustomerView}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7788 次 |
最近记录: |