前言
春节期间,更新了一下自己关于前端的知识体系,要知道对于前端技术,我还是停留在JSP,JQUERY的时代,现在项目里面使用REACT作为前台,所以带着看一看的心态,看了前台同学的脚手架,看完吓了一跳,因为…完全看不懂.所以借着这个机会好好的将REACT摸一遍。
先是基础知识,首先是补了NODEJS的基础,使用了RUNOOB的入门教程。简单的介绍了NODE的相关模块,主要有系统文件系统操作,WEB模块,GET&POST参数解析,以及EXPRESS框架介绍,都介绍的比较浅。
然后是有幸看到阮一峰关于REACT的博客,主要看了ES6,Babel,Webpack, React 和 React-Route 以及 Redux。
另外关于WEBPACK,慕课的视频教程讲的也比较清晰,适合入门
统统过了一遍之后,开始建立REACT脚手架,正式上
马(编写Hello World)。选定REACT + WEBPACK + WEBSTORM. 话说作为windows老铁,断断续续在家里用了两年的MAC(公司办公还是用WIN)后,慢慢对MAC路转粉了,作为程序员,MAC真的很方便。废话不多说了,下面一步一步开始了。
安装软件
需要安装node.js和npm工具,这个就不多说了,现在安装node附带npm了。如果你安装了brew,直接使用brew install node即可。
使用 node -v , npm -v 检查是否安装完成。
安装完成之后,记得设置NODE_PATH路径
构建项目
- 使用webstorm新建一个空白项目。
- 打开webstorm的控制台,输入npm init初始化一个package.json(和maven一样,这个是npm的依赖库描述文件)
- 安装使用的库,其中–save-dev会把下载包的相关信息自动写到package.json的devDependencies中,其他人只需要运行npm install就可以下载相关的依赖到当前项目中。
npm install webpack webpack-dev-server babel --save-dev
npm install react react-dom babel-loader less-loader css-loader style-loader url-loader file-loader babel-preset-es2015 babel-preset-react react-hot-loader jquery eslint eslint-plugin-react --save-dev
项目文件
均在当前项目文件夹下新建一下文件/目录
- 新建webpack.config.js文件
'use strict';
var webpack = require('webpack');
var path = require('path');
//change:使用commonsplugin打包失败,替换成htmlWebpackPlugin
var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');
var htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
devtool: 'eval',
entry: [
'./src/js/main.js'
],
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/static/'
},
plugins: [
new htmlWebpackPlugin({
template:'index.html',
filename:'index.html',
title:'webpack is good'
})
],
module: {
loaders: [
{
test: /\.css$/,
loader: 'style-loader!css-loader'
},
{
test: /\.jsx?$/,
loaders: ['react-hot-loader/webpack', 'babel-loader'],
exclude: /node_modules/,
},
{
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"
}
]
},
resolve:{
extensions:['.js', '.jsx', '.less', '.css']
}
};
- 新建.babelrc文件
{
"presets": ["es2015", "react"]
}
- 新建.eslintrc文件
{
"ecmaFeatures": {
"jsx": true,
"modules": true
},
"env": {
"browser": true,
"node": true
},
"parser": "babel-eslint",
"rules": {
"quotes": [2, "single"],
"strict": [2, "never"],
"react/jsx-uses-react": 2,
"react/jsx-uses-vars": 2,
"react/react-in-jsx-scope": 2
},
"plugins": [
"react"
]
}
- 新建server.js文件
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config');
new WebpackDevServer(webpack(config), {
publicPath: config.output.publicPath,
hot: true,
inline:true,
historyApiFallback: true
}).listen(3000, 'localhost', function (err, result) {
if (err) {
return console.log(err);
}
console.log('Listening at http://localhost:3000/');
});
- 修改package.json
"scripts": {
"dev": "webpack-dev-server --open",
"start": "node server.js",
"lint": "eslint src"
}
- 创建src/js文件夹
- 创建src/js/a.js
import React, { Component } from 'react';
export default class Hello extends Component {
render() {
return (
<div>
<h1>Hello, world.</h1>
<p>this is a simple section</p>
<p>终于搭建成功了</p>
</div>
);
}
}
- 创建src/js/main.js
import React from 'react';
import ReactDOM from 'react-dom';
import Hello from './a';
ReactDOM.render(<Hello />, document.getElementById('root'));
- 创建index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div id="root"></div>
<%= htmlWebpackPlugin.options.title %>
</body>
</html>
运行项目
在控制台运行npm run start,在浏览器中输入http://localhost:3000/dist/index.html,出现一下页面,即表示脚手架搭建完成。
Hello, world.
this is a simple section
终于搭建成功了
webpack is good