本文中的例子支持webpack-dev-server自动刷新及react热替换,使用了redux管理state,用react-router切换路由,用babel实现ES6语法书写,同时支持async/await书写,eslint代码检测,及sass的使用

1.搭建前文档结构:

assets 用来存放css 及 图片等资源

components存放组件

js 用来存放js文件

页面主文件是 index.html

不用纠结文件夹结构,只要不涉及团队合作,这玩意儿就像自己的女人,想咋睡咋睡,想咋组织就咋组织 大致如此

2.webpack配置文件的书写

var webpack=require('webpack');
var path=require('path');
var DashboardPlugin = require('webpack-dashboard/plugin');//一款很屌的插件,用了你就知道了
module.exports={
entry:{ //多文件入口以及配置dev server及热替换
app:[path.resolve(__dirname, './js/index.js'),'webpack/hot/dev-server.js','webpack-dev-server/client?http://0.0.0.0:8080'],
vendor:['react']
},
output:{ //多文件输出 注意[name]这种写法
publicPath:'/build',
filename:'[name].js'
},
module:{
loaders:[ //最新loader的写法
{test:/\.js?$/,loaders:['babel','eslint'],exclude: /node_modules/},
{test:/\.jsx?$/,loaders:['babel','eslint'],exclude: /node_modules/},
{test: /\.(jpg|png|gif)$/, loader: "url?limit=8192",exclude: /node_modules/},
{test:/\.(scss|css)?$/,loader:'style!css!sass',exclude: /node_modules/}
]
},
resolve:{ //配置node_modules的地址、文件名省略及文件路径简写
root:'/Users/****/mywork/rwp/node_modules',
extensions:['','.js','.jsx','.json','.scss'],
alias:{
listCss:path.join(__dirname,'./assets/css/list'),
publicCss:path.join(__dirname,'./assets/css/public'),
bkCss:path.join(__dirname,'./assets/css/bk'),
coverCss:path.join(__dirname,'./assets/css/cover'),
listCp:path.join(__dirname,'./components/list'),
bkCp:path.join(__dirname,'./components/bk'),
cbCp:path.join(__dirname,'./components/cb'),
publicCp:path.join(__dirname,'./components/public'),
coverCp:path.join(__dirname,'./components/cover')
}
},
eslint:{//eslint配置文件
configFile:"./.eslintrc.js"
},
plugins:[
new webpack.NoErrorsPlugin(), //防错误打断程序插件
new DashboardPlugin(),
new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js')
]
}

以上是webpack.config.js,用于生产环境的配置文件,下面这个是一个比较粗糙的生产环境配置文件,待优化

var webpack=require('webpack');
var path=require('path');
var uglifyJsPlugin = webpack.optimize.UglifyJsPlugin;//代码压缩插件
var CopyWebpackPlugin = require('copy-webpack-plugin');//文件拷贝插件
module.exports={
entry:{
"./build/app":path.resolve(__dirname, './js/index.js'),
"./build/vendor":['react']
},
output:{
publicPath:'/',
path:path.resolve(__dirname,'../../package'),
filename:'[name].js'
},
module:{
loaders:[
{test:/\.js?$/,loaders:['babel','eslint'],exclude: /node_modules/},
{test:/\.jsx?$/,loaders:['babel','eslint'],exclude: /node_modules/},
{test: /\.(jpg|png|gif)$/, loader: "url?limit=8192",exclude: /node_modules/},
{test:/\.(scss|css)?$/,loader:'style!css!sass',exclude: /node_modules/}
]
},
resolve:{
root:'/Users/****/mywork/rwp/node_modules',
extensions:['','.js','.jsx','.json','.scss'],
alias:{
listCss:path.join(__dirname,'./assets/css/list'),
publicCss:path.join(__dirname,'./assets/css/public'),
bkCss:path.join(__dirname,'./assets/css/bk'),
coverCss:path.join(__dirname,'./assets/css/cover'),
listCp:path.join(__dirname,'./components/list'),
bkCp:path.join(__dirname,'./components/bk'),
cbCp:path.join(__dirname,'./components/cb'),
publicCp:path.join(__dirname,'./components/public'),
coverCp:path.join(__dirname,'./components/cover')
}
},
plugins:[
new webpack.optimize.DedupePlugin(),//文件内容深度去重
new uglifyJsPlugin({
compress: {
warnings: false
}
}),
new CopyWebpackPlugin([
{ from: 'index.html', to: 'index.html' }
])
]
}

关于配置文件的详细叙述及各字段意思请大家查看官网:

https://webpack.github.io/docs/configuration.html#module-loaders

下面是package.json

{
"name": "rwp",
"version": "1.0.0",
"description": "this is a test project",
"main": "server.js",
"scripts": {
"build": "webpack --progress --profile --colors --config webpack.production.config.js",
"start": "webpack-dashboard -- webpack-dev-server --hot --progress --colors"
},
"keywords": [
"test"
],
"babel": {
"presets": [
"es2015",
"react"
]
},
"author": "jhone lee",
"license": "ISC",
"dependencies": {
"babel-runtime": "^6.11.6",
"body-parser": "1.15.x",
"copy-webpack-plugin": "^3.0.1",
"express": "4.x",
"jquery": ">=2.x",
"react": ">=15.2.x",
"react-redux": "^4.4.5",
"react-router": "2.6.x",
"react-router-redux": "^4.0.5",
"redux": "^3.5.2",
"redux-logger": "^2.6.1",
"redux-thunk": "^2.1.0"
},
"devDependencies": {
"babel": "6.x",
"babel-core": "6.x",
"babel-eslint": "^6.1.2",
"babel-loader": "*",
"babel-plugin-transform-runtime": "^6.12.0",
"babel-polyfill": "^6.13.0",
"babel-preset-es2015": "^6.9.0",
"babel-preset-react": "^6.11.1",
"babel-preset-stage-0": "^6.5.0",
"babel-runtime": "^6.11.6",
"css-loader": "*",
"eslint": "^3.3.1",
"eslint-loader": "^1.5.0",
"eslint-plugin-react": "^5.2.2",
"file-loader": "^0.9.0",
"jsx-loader": "^0.13.2",
"node-sass": "^3.8.0",
"react-dom": "^15.2.1",
"redux": "^3.5.2",
"redux-devtools": "^3.3.1",
"sass-loader": "^4.0.0",
"style-loader": "^0.13.1",
"url-loader": "^0.5.7",
"webpack": "1.13.1",
"webpack-dashboard": "^0.1.7",
"webpack-dev-server": "1.4.x"
}
}

这里需要注意的script里面需要执行的命令:

npm run build 会运行生产环境的config文件

npm start 会运行开发环境的config文件

后面至于 redux及react-router怎么用,以及.babelrc  和 .eslintrc怎么配置不在本文的讨论范畴

仅粘出我的 两个rc文件

module.exports = {
"parser":"babel-eslint",
"env": {
"browser": true,
"commonjs": true,
"es6": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaFeatures": {
"experimentalObjectRestSpread": true,
"jsx": true
},
"sourceType": "module"
},
"plugins": [
"react"
],
"rules": {
"indent": [
"warn",
4
],
"linebreak-style": [
"warn",
"unix"
],
"quotes": [
"warn",
"double"
],
"semi": [
"error",
"always"
],
"no-unused-vars":[
"warn",
{
"vars": "all",
"args": "after-used"
}
],
"no-console":[
"error",{
"allow":["log","error","warn"]
}],
"no-constant-condition":[
"warn",{
"checkLoops":false
}
],
"no-fallthrough":["warn",{
"commentPattern": "break[\\s\\w]*omitted"
}]
}
};

以上为 .eslintrc

{
"presets": [ "es2015", "stage-0","react"],
"plugins": [
["transform-runtime", {
"polyfill": false,
"regenerator": true
}]
]
}

以上为 .babelrc

至于react-router及redux怎么用,以后有时间再说

react+webpack+babel+eslint+redux+react-router+sass 环境快速搭建的更多相关文章

  1. react+webpack+babel环境搭建

    [react+webpack+babel环境搭建] 1.react官方文档推荐使用 babel-preset-react.babel-preset-es2015 两个perset. Babel官方文档 ...

  2. webpack 通用环境快速搭建

    能用babel编译es2015 . 能热编译.能加载静态资源(js/css/font/image).是一个很通用的开发环境,虽然不智能.但很好扩展 npm 安装列表: # webpack 核心 npm ...

  3. 基于webpack的Vue.js开发环境快速搭建

    1. 安装node node下载地址 2. 安装淘宝 NPM npm 是node.js 的包管理工具. 镜像命令地址 #命令行: npm install -g cnpm 3. 安装vue # 全局安装 ...

  4. Redux React & Online Video Tutorials

    Redux React & Online Video Tutorials https://scrimba.com/@xgqfrms https://scrimba.com/c/cEwvKNud ...

  5. react看这篇就够了(react+webpack+redux+reactRouter+sass)

    本帖将对一下内容进行分享: 1.webpack环境搭建: 2.如何使用react-router: 3.引入sass预编译: 4.react 性能优化方案: 5.redux结合react使用: 6.fe ...

  6. webpack,react,babel

    window搭建webpack,react,babel傻瓜教程   首先现在的webpack教程已经很多了,写这篇的原因是因为自己在从小白开始的搭建过程中,并没有找到比较好的教程,花费了很多的时间,s ...

  7. 重温 Webpack, Babel 和 React

    开始之前 在书写文章之前,我假设大家已经有了 JavaScript,Node 包管理工具,Linux 终端操作 这些基本技能,接下来,我将一步一步指引大家从头搭建一个 React 项目 最终实现的效果 ...

  8. react案例->新闻移动客户端--(react+redux+es6+webpack+es6的spa应用)

    今天分享一个react应用,应在第一篇作品中说要做一个react+redux+xxx的应用.已经做完一部分,拿出来分享.github地址为:点我就可以咯~ 这里实现了一个新闻移动站的spa.本来想写p ...

  9. 详解 Webpack+Babel+React 开发环境的搭建

    1.认识Webpack 构建应用前我们先来了解一下Webpack, Webpack是一个模块打包工具,能够把各种文件(例如:ReactJS.Babel.Coffeescript.Less/Sass等) ...

随机推荐

  1. 杜绝网上压根没测过就乱写之 《oracle mybatis 返回自增主键 》

    面试过好多人,包括自己也属于这么一个情况: 遇到问题直接去网上查,一般都可以查到解决方案.其中也包括一些基本的面试资料的答案. 其实有很多答案也都是正确的,但是还是存在一些压根就是胡乱抄来的答案,也不 ...

  2. TensorFlow 调用预训练好的模型—— Python 实现

    1. 准备预训练好的模型 TensorFlow 预训练好的模型被保存为以下四个文件 data 文件是训练好的参数值,meta 文件是定义的神经网络图,checkpoint 文件是所有模型的保存路径,如 ...

  3. Python 3.6 爬取BD电影网

    2018-07-10 #coding:utf-8 #coding:utf-8 from lxml import etree import requests import pandas import t ...

  4. cocos2d-x环境搭建 摘自百度文库

    cocos2d-x环境搭建 引言:笔者在网上寻觅了很多资料,最终发现了这份实际可用的文档,供大家参考.源地址:http://wenku.baidu.com/view/93f7b0f1102de2bd9 ...

  5. pta指针作业

    #PTA实验作业 6-1 本题pta提交列表 设计思路 本题是一道简单的指针程序题,两个数已经分别被指针定义,只要把用其指针把二者加在一起和减去即可 调试过程 本题无调试过程 代码截图 6-2  1. ...

  6. Sublime Text 2创建可复用的代码片段

    对于前端工程师来讲,写一个html页面的基本结构是体力活,每次去拷贝一个也麻烦,sublime text 2 提供了一个很好的复用代码片段.下面介绍一下创建一个html5的代码片段的过程.在菜单上点击 ...

  7. JDBC连接数据库的过程

    以连接MySQL为例: (1)加载MySQL数据库连接的驱动程序.到MySQL官网下载该驱动程序jar包,然后把包复制到WEB-INF/lib目录下,则JDBC会调用Class.forName()方法 ...

  8. Codeforces 821E Okabe and El Psy Kongroo(矩阵快速幂)

    E. Okabe and El Psy Kongroo time limit per test 2 seconds memory limit per test 256 megabytes input ...

  9. 【题解】ZJOI2017仙人掌

    感觉这题很厉害啊,虽然想了一天多但还是失败了……(:д:) 这题首先注意到给定图中如果存在环其实对于答案是没有影响的.然后关键之处就在于两个 \(dp\) 数组,其中 \(f[u]\) 表示以 \(u ...

  10. BZOJ 2178 圆的面积并 ——Simpson积分

    [题目分析] 史上最良心样例,史上最难调样例. Simpson积分硬上. 听说用long double 精度1e-10才能过. 但是double+1e-6居然过了. [代码] #include < ...