我是React和Webpack的新手。我正在设置我的第一个项目,当我尝试运行webpack-dev-server时,我的代码无法编译!
*下面的 *更新 答案是正确的。我需要添加'react'到babel loader预设中。您可以在这里查看项目的完整资源:https://github.com/cleechtech/redux- todo
'react'
错误:
$ webpack-dev-server http://localhost:8080/webpack-dev-server/ webpack result is served from / content is served from ./dist Hash: d437a155a1da4cdfeeeb Version: webpack 1.12.14 Time: 5938ms Asset Size Chunks Chunk Names bundle.js 1.51 kB 0 [emitted] main chunk {0} bundle.js (main) 28 bytes [rendered] [0] multi main 28 bytes {0} [built] [1 error] ERROR in ./src/index.js Module build failed: SyntaxError: /Users/connorleech/Projects/redux-todo/src/index.js: Unexpected token (7:16) console.log(ReactDOM); ReactDOM.render(<App />,document.getElementById('root'));
src / index.js:
var react = require('react'); var ReactDOM = require('react-dom'); var App = require('./components/App'); console.log(ReactDOM); ReactDOM.render(<App />,document.getElementById('root'));
src / components / App.js
var React = require('react'); var App = React.createClass({ render: function() { return ( <div> <h1>I am app!</h1> </div> ); } }); console.log(App); module.exports = App;
dist / index.html
<!doctype html> <head> <title>Redux todo</title> </head> <body> <h1>Hello world</h1> <div id='root'></div> <script src='bundle.js'></script> </body>
最后是我的webpack配置和package.json:
module.exports = { // starting point entry: [ './src/index.js' ], module: { loaders: [ { test: /\.js?$/, exclude: /(node_modules|bower_components)/, loader: 'babel', // 'babel-loader' is also a legal name to reference query: { presets: ['es2015'] } } ] }, resolve: { extensions: ['', '.js', '.jsx'] }, // create bundle.js file output: { path: __dirname + '/dist', publicPath: '/', filename: 'bundle.js' }, devServer: { contentBase: './dist' } };
package.json
{ "name": "redux-todo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "git+https://github.com/cleechtech/redux-todo.git" }, "keywords": [], "author": "", "license": "ISC", "bugs": { "url": "https://github.com/cleechtech/redux-todo/issues" }, "homepage": "https://github.com/cleechtech/redux-todo#readme", "dependencies": { "react": "^0.14.8", "react-dom": "^0.14.8", "react-redux": "^4.4.1", "redux": "^3.3.1" }, "devDependencies": { "babel-core": "^6.7.4", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.6.0", "webpack": "^1.12.14" } }
您还需要将react预设添加到您的babel-loader配置中
react
babel-loader
它必须在 es2015
es2015
{ test: /\.js?$/, exclude: /(node_modules|bower_components)/, loader: 'babel', // 'babel-loader' is also a legal name to reference query: { presets: ['es2015', 'react'] } }
您遇到的问题的发生是因为babel知道如何转换JSX-它应该知道其语法,但并不是开箱即用的。
正如评论中提到的那样-您还必须安装babel-preset-reactnpm软件包(无论如何,这显然很明显,因为babel会在第一次运行时告诉您)。
babel-preset-react
参考文献: