react+webpack+babel+eslint+redux+react-router+sass 环境快速搭建
本文中的例子支持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 环境快速搭建的更多相关文章
- react+webpack+babel环境搭建
[react+webpack+babel环境搭建] 1.react官方文档推荐使用 babel-preset-react.babel-preset-es2015 两个perset. Babel官方文档 ...
- webpack 通用环境快速搭建
能用babel编译es2015 . 能热编译.能加载静态资源(js/css/font/image).是一个很通用的开发环境,虽然不智能.但很好扩展 npm 安装列表: # webpack 核心 npm ...
- 基于webpack的Vue.js开发环境快速搭建
1. 安装node node下载地址 2. 安装淘宝 NPM npm 是node.js 的包管理工具. 镜像命令地址 #命令行: npm install -g cnpm 3. 安装vue # 全局安装 ...
- Redux React & Online Video Tutorials
Redux React & Online Video Tutorials https://scrimba.com/@xgqfrms https://scrimba.com/c/cEwvKNud ...
- react看这篇就够了(react+webpack+redux+reactRouter+sass)
本帖将对一下内容进行分享: 1.webpack环境搭建: 2.如何使用react-router: 3.引入sass预编译: 4.react 性能优化方案: 5.redux结合react使用: 6.fe ...
- webpack,react,babel
window搭建webpack,react,babel傻瓜教程 首先现在的webpack教程已经很多了,写这篇的原因是因为自己在从小白开始的搭建过程中,并没有找到比较好的教程,花费了很多的时间,s ...
- 重温 Webpack, Babel 和 React
开始之前 在书写文章之前,我假设大家已经有了 JavaScript,Node 包管理工具,Linux 终端操作 这些基本技能,接下来,我将一步一步指引大家从头搭建一个 React 项目 最终实现的效果 ...
- react案例->新闻移动客户端--(react+redux+es6+webpack+es6的spa应用)
今天分享一个react应用,应在第一篇作品中说要做一个react+redux+xxx的应用.已经做完一部分,拿出来分享.github地址为:点我就可以咯~ 这里实现了一个新闻移动站的spa.本来想写p ...
- 详解 Webpack+Babel+React 开发环境的搭建
1.认识Webpack 构建应用前我们先来了解一下Webpack, Webpack是一个模块打包工具,能够把各种文件(例如:ReactJS.Babel.Coffeescript.Less/Sass等) ...
随机推荐
- 容器基础(五): 实现一个简单容器sdocker
在前面几部分的基础上, 我们更新一下代码,实现一个简单容器 sdocker. sdocker目录构成 linux: # tree . ├── Makefile ├── cpu-test.c # 由cp ...
- 辨析ADK&JVM&JRE&JDK&ADT
一.SDK 英文全称:Software Development Kit 中文译名:软件开发工具包 详解: 由第三方服务商提供的实现软件产品某项功能的工具包. 为了扩展软件功能或其它方面而设计出来给开发 ...
- 使用ListOperations操作redis
使用ListOperations对象操作redis list: 方法 c参数 s说明 List<V> range(K key, long start, long end); K key ...
- laravel 学习随笔(一)
1.路由参数:路由参数总是通过花括号进行包裹,参数在路由被执行时会被传递到路由的闭包.(路由参数不能包含“-”字符,如有需要可以用“_”代替):
- 【iOS开发】IOS界面开发使用viewWithTag:(int)findTag方法获取界面元素
http://blog.csdn.net/lxp1021/article/details/43952551 今天在开发OS界面的时候,遇到通过界面UIview viewWithTag:(int)fin ...
- 将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% ...
- java正则表达式 3 -- 查找
用正则表达式执行查找命令,则需要用正则对象,其规则和执行顺序如下: 指定为字符串的正则表达式必须首先被便以为此类的实例.然后,可将得到的正则对象匹配任意的字符串用于创建Mather对象,执行匹配所涉及 ...
- js计算当前日期上一个月和下一个月
/** * 获取上一个月 * * @date 格式为yyyy-mm-dd的日期,如:2014-01-25 */ funct ...
- 解决IIS的Server Application Error
问题描述一下: Server Application ErrorThe server has encountered an error while loading an application dur ...
- jsp电子商务 购物车实现之一 设计篇
购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3.用cookie和数据库(购物车信息持久化)实现购物车: ============= ...