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

1.搭建前文档结构:

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

components存放组件

js 用来存放js文件

页面主文件是 index.html

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

2.webpack配置文件的书写

  1. var webpack=require('webpack');
  2. var path=require('path');
  3. var DashboardPlugin = require('webpack-dashboard/plugin');//一款很屌的插件,用了你就知道了
  4. module.exports={
  5. entry:{ //多文件入口以及配置dev server及热替换
  6. app:[path.resolve(__dirname, './js/index.js'),'webpack/hot/dev-server.js','webpack-dev-server/client?http://0.0.0.0:8080'],
  7. vendor:['react']
  8. },
  9. output:{ //多文件输出 注意[name]这种写法
  10. publicPath:'/build',
  11. filename:'[name].js'
  12. },
  13. module:{
  14. loaders:[ //最新loader的写法
  15. {test:/\.js?$/,loaders:['babel','eslint'],exclude: /node_modules/},
  16. {test:/\.jsx?$/,loaders:['babel','eslint'],exclude: /node_modules/},
  17. {test: /\.(jpg|png|gif)$/, loader: "url?limit=8192",exclude: /node_modules/},
  18. {test:/\.(scss|css)?$/,loader:'style!css!sass',exclude: /node_modules/}
  19. ]
  20. },
  21. resolve:{ //配置node_modules的地址、文件名省略及文件路径简写
  22. root:'/Users/****/mywork/rwp/node_modules',
  23. extensions:['','.js','.jsx','.json','.scss'],
  24. alias:{
  25. listCss:path.join(__dirname,'./assets/css/list'),
  26. publicCss:path.join(__dirname,'./assets/css/public'),
  27. bkCss:path.join(__dirname,'./assets/css/bk'),
  28. coverCss:path.join(__dirname,'./assets/css/cover'),
  29. listCp:path.join(__dirname,'./components/list'),
  30. bkCp:path.join(__dirname,'./components/bk'),
  31. cbCp:path.join(__dirname,'./components/cb'),
  32. publicCp:path.join(__dirname,'./components/public'),
  33. coverCp:path.join(__dirname,'./components/cover')
  34. }
  35. },
  36. eslint:{//eslint配置文件
  37. configFile:"./.eslintrc.js"
  38. },
  39. plugins:[
  40. new webpack.NoErrorsPlugin(), //防错误打断程序插件
  41. new DashboardPlugin(),
  42. new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js')
  43. ]
  44. }

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

  1. var webpack=require('webpack');
  2. var path=require('path');
  3. var uglifyJsPlugin = webpack.optimize.UglifyJsPlugin;//代码压缩插件
  4. var CopyWebpackPlugin = require('copy-webpack-plugin');//文件拷贝插件
  5. module.exports={
  6. entry:{
  7. "./build/app":path.resolve(__dirname, './js/index.js'),
  8. "./build/vendor":['react']
  9. },
  10. output:{
  11. publicPath:'/',
  12. path:path.resolve(__dirname,'../../package'),
  13. filename:'[name].js'
  14. },
  15. module:{
  16. loaders:[
  17. {test:/\.js?$/,loaders:['babel','eslint'],exclude: /node_modules/},
  18. {test:/\.jsx?$/,loaders:['babel','eslint'],exclude: /node_modules/},
  19. {test: /\.(jpg|png|gif)$/, loader: "url?limit=8192",exclude: /node_modules/},
  20. {test:/\.(scss|css)?$/,loader:'style!css!sass',exclude: /node_modules/}
  21. ]
  22. },
  23. resolve:{
  24. root:'/Users/****/mywork/rwp/node_modules',
  25. extensions:['','.js','.jsx','.json','.scss'],
  26. alias:{
  27. listCss:path.join(__dirname,'./assets/css/list'),
  28. publicCss:path.join(__dirname,'./assets/css/public'),
  29. bkCss:path.join(__dirname,'./assets/css/bk'),
  30. coverCss:path.join(__dirname,'./assets/css/cover'),
  31. listCp:path.join(__dirname,'./components/list'),
  32. bkCp:path.join(__dirname,'./components/bk'),
  33. cbCp:path.join(__dirname,'./components/cb'),
  34. publicCp:path.join(__dirname,'./components/public'),
  35. coverCp:path.join(__dirname,'./components/cover')
  36. }
  37. },
  38. plugins:[
  39. new webpack.optimize.DedupePlugin(),//文件内容深度去重
  40. new uglifyJsPlugin({
  41. compress: {
  42. warnings: false
  43. }
  44. }),
  45. new CopyWebpackPlugin([
  46. { from: 'index.html', to: 'index.html' }
  47. ])
  48. ]
  49. }

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

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

下面是package.json

  1. {
  2. "name": "rwp",
  3. "version": "1.0.0",
  4. "description": "this is a test project",
  5. "main": "server.js",
  6. "scripts": {
  7. "build": "webpack --progress --profile --colors --config webpack.production.config.js",
  8. "start": "webpack-dashboard -- webpack-dev-server --hot --progress --colors"
  9. },
  10. "keywords": [
  11. "test"
  12. ],
  13. "babel": {
  14. "presets": [
  15. "es2015",
  16. "react"
  17. ]
  18. },
  19. "author": "jhone lee",
  20. "license": "ISC",
  21. "dependencies": {
  22. "babel-runtime": "^6.11.6",
  23. "body-parser": "1.15.x",
  24. "copy-webpack-plugin": "^3.0.1",
  25. "express": "4.x",
  26. "jquery": ">=2.x",
  27. "react": ">=15.2.x",
  28. "react-redux": "^4.4.5",
  29. "react-router": "2.6.x",
  30. "react-router-redux": "^4.0.5",
  31. "redux": "^3.5.2",
  32. "redux-logger": "^2.6.1",
  33. "redux-thunk": "^2.1.0"
  34. },
  35. "devDependencies": {
  36. "babel": "6.x",
  37. "babel-core": "6.x",
  38. "babel-eslint": "^6.1.2",
  39. "babel-loader": "*",
  40. "babel-plugin-transform-runtime": "^6.12.0",
  41. "babel-polyfill": "^6.13.0",
  42. "babel-preset-es2015": "^6.9.0",
  43. "babel-preset-react": "^6.11.1",
  44. "babel-preset-stage-0": "^6.5.0",
  45. "babel-runtime": "^6.11.6",
  46. "css-loader": "*",
  47. "eslint": "^3.3.1",
  48. "eslint-loader": "^1.5.0",
  49. "eslint-plugin-react": "^5.2.2",
  50. "file-loader": "^0.9.0",
  51. "jsx-loader": "^0.13.2",
  52. "node-sass": "^3.8.0",
  53. "react-dom": "^15.2.1",
  54. "redux": "^3.5.2",
  55. "redux-devtools": "^3.3.1",
  56. "sass-loader": "^4.0.0",
  57. "style-loader": "^0.13.1",
  58. "url-loader": "^0.5.7",
  59. "webpack": "1.13.1",
  60. "webpack-dashboard": "^0.1.7",
  61. "webpack-dev-server": "1.4.x"
  62. }
  63. }

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

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

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

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

仅粘出我的 两个rc文件

  1. module.exports = {
  2. "parser":"babel-eslint",
  3. "env": {
  4. "browser": true,
  5. "commonjs": true,
  6. "es6": true
  7. },
  8. "extends": "eslint:recommended",
  9. "parserOptions": {
  10. "ecmaFeatures": {
  11. "experimentalObjectRestSpread": true,
  12. "jsx": true
  13. },
  14. "sourceType": "module"
  15. },
  16. "plugins": [
  17. "react"
  18. ],
  19. "rules": {
  20. "indent": [
  21. "warn",
  22. 4
  23. ],
  24. "linebreak-style": [
  25. "warn",
  26. "unix"
  27. ],
  28. "quotes": [
  29. "warn",
  30. "double"
  31. ],
  32. "semi": [
  33. "error",
  34. "always"
  35. ],
  36. "no-unused-vars":[
  37. "warn",
  38. {
  39. "vars": "all",
  40. "args": "after-used"
  41. }
  42. ],
  43. "no-console":[
  44. "error",{
  45. "allow":["log","error","warn"]
  46. }],
  47. "no-constant-condition":[
  48. "warn",{
  49. "checkLoops":false
  50. }
  51. ],
  52. "no-fallthrough":["warn",{
  53. "commentPattern": "break[\\s\\w]*omitted"
  54. }]
  55. }
  56. };

以上为 .eslintrc

  1. {
  2. "presets": [ "es2015", "stage-0","react"],
  3. "plugins": [
  4. ["transform-runtime", {
  5. "polyfill": false,
  6. "regenerator": true
  7. }]
  8. ]
  9. }

以上为 .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. 容器基础(五): 实现一个简单容器sdocker

    在前面几部分的基础上, 我们更新一下代码,实现一个简单容器 sdocker. sdocker目录构成 linux: # tree . ├── Makefile ├── cpu-test.c # 由cp ...

  2. 辨析ADK&JVM&JRE&JDK&ADT

    一.SDK 英文全称:Software Development Kit 中文译名:软件开发工具包 详解: 由第三方服务商提供的实现软件产品某项功能的工具包. 为了扩展软件功能或其它方面而设计出来给开发 ...

  3. 使用ListOperations操作redis

    使用ListOperations对象操作redis list: 方法 c参数 s说明   List<V> range(K key, long start, long end); K key ...

  4. laravel 学习随笔(一)

    1.路由参数:路由参数总是通过花括号进行包裹,参数在路由被执行时会被传递到路由的闭包.(路由参数不能包含“-”字符,如有需要可以用“_”代替):

  5. 【iOS开发】IOS界面开发使用viewWithTag:(int)findTag方法获取界面元素

    http://blog.csdn.net/lxp1021/article/details/43952551 今天在开发OS界面的时候,遇到通过界面UIview viewWithTag:(int)fin ...

  6. 将Excel表中的数据导入MySQL数据库

    原文地址: http://fanjiajia.cn/2018/09/26/%E5%B0%86Excel%E8%A1%A8%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E5% ...

  7. java正则表达式 3 -- 查找

    用正则表达式执行查找命令,则需要用正则对象,其规则和执行顺序如下: 指定为字符串的正则表达式必须首先被便以为此类的实例.然后,可将得到的正则对象匹配任意的字符串用于创建Mather对象,执行匹配所涉及 ...

  8. js计算当前日期上一个月和下一个月

    /**         * 获取上一个月         *         * @date 格式为yyyy-mm-dd的日期,如:2014-01-25         */        funct ...

  9. 解决IIS的Server Application Error

    问题描述一下: Server Application ErrorThe server has encountered an error while loading an application dur ...

  10. jsp电子商务 购物车实现之一 设计篇

    购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3.用cookie和数据库(购物车信息持久化)实现购物车: ============= ...