1、首先是目录结构

|-node_modules/                  #包文件
|-build/ #静态资源生成目录
|-src/ #开发目录
|-js/
|-index.js #入口文件
|-app.js #React组件文件
|-css/
|-style.scss #SASS样式文件
|-webpack.config.js #webpack开发配置文件
|-index.html
|-package.json

2、webpack配置文件 !important

  • entry 入口文件地址:
entry:{
build:"./src/js/index.js"
}

入口文件用来引用其他依赖,最终webpack会把所有依赖打包输出;

入口文件index.js类似这样:

import React, { Component, PropTypes, cloneElement } from 'react';
import ReactDOM from 'react-dom';
import styles from '../css/style.scss';
import App from './app'; ReactDOM.render(<App />, document.getElementById('root'));

起初没有index.js,入口文件为app.js;

app.js最后末尾执行ReactDOM.render,App组件不作为模块输出export, 这样做修改app.js会刷新整个页面,app.js无法进行模块热更新;

最终改为app.js作为模块输出export,用index.js作为入口文件,执行ReactDOM.render渲染DOM.

  • output 输出目录
path:打包输出目录

filename:
打包输出的文件名
具体文件名xxx.js或[name].js
[name]为入口entry对象中KEY值 build publicPath:主要是用在webpack-dev-server,设置bundle的生成路径
publicPath:'/bundle/'
在使用webpack-dev-server时,
index.html中通过<script src="/bundle/build.js"></script>引用bundle
  • module.loaders 设置各种webpack loader
module:{
loaders:{
//文件名匹配成功的文件-->执行loaders
test: /\.jsx?$/,
//设置路径范围
include: [
path.resolve(__dirname, './src/js'),
],
//需要执行的loaders
loaders: ['react-hot', 'babel'],
}
}

编译打包React ES6 需要用到react-hot-loader babel-loader

编译打包SCSS css 需要用到style-loader css-loader sass-loader

以 loaders: ['react-hot', 'babel'] 为例

loaders的执行顺序是从右到左:先babel编译,然后执行react-hot模块热更新

  • resolve 设置模块扩展名,和依赖的路径

不设置扩展名如'.jsx', 在引入模块时会找不到.jsx文件导致报错

resolve: {
alias: {
'react': path.join(__dirname, 'node_modules', 'react'),
},
extensions: ['', '.js', '.jsx', '.scss', '.css'],
},
  • devServer : WDS服务器相关配置
devServer:{
historyApiFallback:true,
hot:true, //热更新
inline:true, //热更新inline模式
progress:true,
port:8888 //设置webpack-dev-server端口
}
  • devtool : 设置SourceMap的生成模式

webpack 有多种SourceMap生成模式

推荐使用cheap-module-eval-source-map

devtool: 'cheap-module-eval-source-map'

完整webpack配置文件 webpack.config.js

let path = require('path');
let webpack = require('webpack');
let sassLoader = 'style!css!sass?sourceMap=true&sourceMapContents=true';
module.exports = {
devtool: 'cheap-module-eval-source-map',
entry:{
build:"./src/js/index.js"
},
output:{
path: path.resolve(__dirname,"./build"),
filename:"build.js",
publicPath: '/bundle/',
},
module:{
loaders:[
{
test: /\.jsx?$/i,
include: [
path.resolve(__dirname, './src/js'),
],
loaders: ['react-hot', 'babel'],
},
{
test: /\.scss$/i,
include: [
path.resolve(__dirname, './src/css'),
],
loader: sassLoader
}
]
},
resolve: {
alias: {
'react': path.join(__dirname, 'node_modules', 'react'),
},
extensions: ['', '.js', '.jsx', '.scss', '.css'],
},
devServer:{
historyApiFallback:true,
hot:true,
inline:true,
progress:true,
port:8888 //webpack-dev-server端口
}
}

3、最后是我的package.json文件

{
"name": "moudel",
"version": "1.0.0",
"description": "",
"main": "webpack.cofing.js",
"directories": {
"test": "test"
},
"scripts": {
"bd": "webpack",
"min": "webpack -p",
"watch": "webpack --watch",
"hot": "webpack-dev-server --hot --inline"
},
"author": "",
"license": "ISC",
"devDependencies": {
"async-each": "^1.0.1",
"babel-core": "^6.18.2",
"babel-loader": "^6.2.8",
"babel-plugin-react-transform": "^2.0.2",
"babel-plugin-transform-class-properties": "^6.19.0",
"babel-preset-latest": "^6.16.0",
"babel-preset-react": "^6.16.0",
"chalk": "^1.1.3",
"classnames": "^2.2.5",
"css-loader": "^0.26.1",
"express": "^4.14.0",
"extract-text-webpack-plugin": "^1.0.1",
"html-webpack-plugin": "^2.24.1",
"lodash.clonedeep": "^4.5.0",
"node-sass": "^3.13.0",
"react": "^15.4.1",
"react-hot-loader": "^1.3.1",
"react-transform-catch-errors": "^1.0.2",
"redbox-react": "^1.3.3",
"sass-loader": "^4.0.2",
"style-loader": "^0.13.1",
"webpack": "^1.13.3",
"webpack-dev-middleware": "^1.8.4",
"webpack-dev-server": "^1.16.2",
"webpack-hot-middleware": "^2.13.2"
},
"dependencies": {
"react-dom": "^15.4.1",
"react-redux": "^4.4.6",
"react-router": "^3.0.0",
"redux": "^3.6.0",
"redux-thunk": "^2.1.0"
}
}

webpack 配置 (支持 React SCSS ES6 编译打包 和 模块热更新 / 生成SourceMap)的更多相关文章

  1. 解放F5——React开启模块热更新

    解放F5--React开启模块热更新 在一个正在开发的应用中,刷新页面将会降低你的生产效率:你必须得等待页面加载完毕. 一个大的应用可能会花很多秒钟才能刷新完页面.使用 HMR(模块热替换) 可以避免 ...

  2. create-react-app react-redux项目 配置模块热更新hmr

    HRM并不是create-react-app专属的,提供一篇博客介绍hrm http://chrisshepherd.me/posts/adding-hot-module-reloading-to-c ...

  3. ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解

    onic官方文档链接:http://ionicframework.com/docs/ 如果是新的环境会有很多坑,主要是有墙,请仔细阅读每个步骤 文档包含以下内容: l  环境搭建 l  创建demo并 ...

  4. webpack配置(使用react,es6的项目)

    const path = require('path');const webpack = require('webpack');const HtmlWebpackPlugin = require('h ...

  5. webpack(二)解析es6并打包

    一.前言 ECMAScript 6(ES6)的发展速度非常之快,但现代浏览器对ES6新特性支持度不高,所以要想在浏览器中直接使用ES6的新特性就得借助别的工具来实现.Babel是一个广泛使用的转码器, ...

  6. walle多渠道打包+Tinker(bugly)热更新集成+360加固(乐固)

    这三个东东是干啥的相信大家都有所耳闻了,如果你没有听说过,请出门左拐,百度一下你就知道.这里不对这三个东东具体的集成方式做详细的介绍,因为官方文档已经写的很详细了,主要是对同时使用这三个东东时所需要注 ...

  7. Egret打包App Android热更新(4.1.0)

    官网教程:http://developer.egret.com/cn/github/egret-docs/Native/native/hotUpdate/index.html 详细可看官网教程,我这里 ...

  8. webpack的热更新

    webpack的热更新是如何做到的?说明其原理? webpack的热更新又称热替换(Hot Module Replacement),缩写为HMR. 这个机制可以做到不用刷新浏览器而将新变更的模块替换掉 ...

  9. webpack 配置react脚手架(二):热更新

    下面继续配置 webpack dev server    hot module replacement: 首先配置dev-server     安装     npm i webpack-dev-ser ...

随机推荐

  1. 开发DZ插件教程

    插件制作的基本思路是:(初学者适用)1.形成插件思路2.制作插件界面3.构架程序模块4.搭建存储数据5.填充功能语句6.检查应用错误7.完善插件功能 前言:为方便互联网数万Discuz!爱好者,更加深 ...

  2. JQuery 判断IPad、IPhone、Android是横屏还是竖屏(Window.Orientation实现)

    在ipad.iphone网页开发中,我们很可能需要判断是横屏或者竖屏.下面就来介绍如何用 jQuery 判断iPad.iPhone.Android是横屏还是竖屏的方法. 代码如下: function ...

  3. c# 循环语句练习题;

    1. 求100以内质数的和 2. 兔子问题 3. 九九乘法表:   一行一行打印: 4. 有一张超大的纸:   纸质的厚度是0.01:   对折多少次,可以达到珠峰的高度:   按照8848来计算: ...

  4. Android Studio使用远程依赖时下载不了jar包的解决方法

    使用AS很大的一个好处就是可以使用在线jar包,只需在引用jar包的时候在版本后加上+,比如: compile 'com.facebook.fresco:fresco:0.1.0+' 这样不用在jar ...

  5. 【Linux】鸟哥的Linux私房菜基础学习篇整理(二)

    1. dumpe2fs [-bh] devicename:查询superblock信息.参数:-b:列出保留为坏道的部分:-h:列出superblock的数据,不会列出其他的区段内容. 2. df [ ...

  6. Apache CXF多个远程拒绝服务漏洞(CVE-2013-2160)

    漏洞版本: Apache Group CXF <= 2.5.10 Apache Group CXF 2.7.4 Apache Group CXF 2.6.7 漏洞描述: BUGTRAQ ID: ...

  7. 图论 BZOJ 3669 [Noi2014]魔法森林

    Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...

  8. [Locked] 3Sum Smaller

    3Sum Smaller Given an array of n integers nums and a target, find the number of index triplets i, j, ...

  9. Codeforces Round #259 (Div. 2) D. Little Pony and Harmony Chest 状压DP

    D. Little Pony and Harmony Chest   Princess Twilight went to Celestia and Luna's old castle to resea ...

  10. The game of life(生命游戏)新算法

    我写了一种常见的实现算法,和另一种新算法,即不是每次循环计算每个细胞的周围细胞数来产生下一时刻,而是每次每个产生状态变化的细胞主动通知周围的邻居,因此每个细胞增加一个用来记录邻居数的字段.由邻居数决定 ...