最近在学习Amazeui-react的开发,发现react着实是一个好东西,但是蛋疼的是webpack这个东西好难配置,稍不注意就会导致自动编译失败,会出现一堆的问题,下面就请跟我一起从零开始学习React+webpack配置,并且如何在webstorm中很好的运用它们。
1、下载webstorm11和nodejs。
下载太慢?直接百度云打包分享吧~~windows mac osx
由于我的电脑的MacBook不是windows,因此可能安装和操作过程会有略微差异,但是差异不大,下面操作基本通用,不通用的我会指明。或者下面留言即可。
npm config set registry https://registry.npm.taobao.org
sudo npm install webpack webpack-dev-server babel -g sudo npm install react react-dom babel-loader less-loader css-loader style-loader url-loader file-loader babel-preset-es2015 babel-preset-react --save-dev
安装结果会显示一些WARN,无视!但是千万别有Error。参数解释:
-g:允许包全局使用
--save-dev:将依赖信息写入package.json的devdependencies。
安装的每个组件解释:
babel:能将es6语法解析成es5(什么是es??ECMAScript*6*入门自己看去,js是它的子集,说白了就是最新的javascript语法),以前是使用jsx-loader来解析着,现在直接用babel替代就行了。
babel-preset-es2015和babel-preset-react:让babel支持es2015语法和jsx语法的两个预设值。
webpack:这个还用说吗?
react-dom:依赖于react,现在都是通过ReactDOM.render()方法来渲染而不是React.render(),facebook官方已经说了。
webpack-dev-server:webpack开发服务器,帮助开发者实时监控webpack项目的文件更改并反映到浏览器上。这样你就能实时地进行预览啦~
babel-loader css-loader babel-loader style-loader url-loader file-loader:几种webpack需要用到的加载器,方便解析css、es6/jsx、和其他静态文件。
小提示:
全局安装支持直接在命令行中启用安装包的命令,例如:你安装了webpack,那么在命令行输入webpack就会出现相应执行,但是非全局不支持使用这个命令的哦。
var webpack=require('webpack');
var commonsPlugin=new webpack.optimize.CommonsChunkPlugin('common.js'); module.exports={ entry:{index:'./src/js/entry.js'}, output:{ path:'dist', filename:'bundle.js' }, module:{ loaders:[ { test:/\.css$/, loader:'style-loader!css-loader' }, { test:/\.jsx?$/, loader:'babel', exclude: /node_modules/, query:{ presets:['es2015','react'] } }, { test:/\.(png|jpg)$/, loader:'url-loader?limit=8192' }, { test:/\.less$/, loader:'style-loader!css-loader!less-loader' }, { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url-loader?limit=10000&mimetype=application/font-woff" }, { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "file-loader" } ], plugins:[ commonsPlugin ] }, resolve:{ root:'', extensions:['','.js','.json','.less'], alias:{ AppStore:'js/stores/AppStores.js' } } }
然后在当前工程目录创建一个src文件夹,在src里面创建一个js文件夹,在js文件夹中新建一个entry.js文件,文件内容如下: var React=require('react');
var ReactDOM=require('react-dom'); ReactDOM.render(<div>Hello world!</div>, document.getElementById("test"));
接下来再在当前工程目录中新建一个dist文件夹,dist文件夹中新建一个index.html文件。内容如下: <html>
<meta charset="utf-8"> <title>React webpack test</title> </head> <body> <div id="test"></div> </div> <script type="text/javascript" src="./bundle.js" charset="utf-8"></script> </body> </html>
最后一步,最后一步了哦~~加入package.json文件,使之成为一个可以用npm命令执行的工程。 {
"name": "react_webpack_test",
"version": "1.0.0", "description": "just webpack and react hello world project!", "scripts": { "build": "webpack --progress --profile --colors", "watch": "webpack-dev-server --port 63340 --content-base ./dist/", "test": "echo \"Error: no test specified\" && exit 1" } }
其中最重要的是script标签。npm run build
然后,在你的Terminal里面会显示如下的东东 > react_webpack_test@1.0.0 build /Users/你的工程所在目录/react_webpack_test
> webpack \--progress \--profile \--color 2m0ms op1ms optimiz12ms emit
Hash: 292766b53fb3969afd55 Version: webpack 1.12.14 Time: 5109ms Asset Size Chunks Chunk Names bundle.js 676 kB 0 [emitted] index \+ 159 hidden modules
如果里面出现了红色的Error那么就说明你的工程配置还有一些问题,如果OK的话,打开浏览器,在里面运行你的dist/index.html文件,看看是否有:hello world!输出http://localhost:63340/webpack-dev-server/
省略这部分……
webpack: bundle is now VALID.
输入:http://localhost:63340/webpack-dev-server/,应该就可以看到你想要的结果,结果如下: 喝杯茶~
……
到了这可以说你的项目就已经完成了,如果你想跟我一样使用Amazeui-react组件,那么就继续跟我这样继续下去吧~
npm install amazeui amazeui-react --save-dev
var React=require('react');
var ReactDOM=require('react-dom'); var AMUI=require('amazeui/dist/css/amazeui.min.css'); var AMUIReact = require('amazeui-react'); var button=( <AMUIReact.Button>这是一个按钮</AMUIReact.Button> ); ReactDOM.render(button,document.getElementById("test"));
下面是我的测试工程链接,自己下载下来拿去用吧.
react_webpack_test