webpack 配置 (支持 React SCSS ES6 编译打包 和 模块热更新 / 生成SourceMap)
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)的更多相关文章
- 解放F5——React开启模块热更新
解放F5--React开启模块热更新 在一个正在开发的应用中,刷新页面将会降低你的生产效率:你必须得等待页面加载完毕. 一个大的应用可能会花很多秒钟才能刷新完页面.使用 HMR(模块热替换) 可以避免 ...
- create-react-app react-redux项目 配置模块热更新hmr
HRM并不是create-react-app专属的,提供一篇博客介绍hrm http://chrisshepherd.me/posts/adding-hot-module-reloading-to-c ...
- ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解
onic官方文档链接:http://ionicframework.com/docs/ 如果是新的环境会有很多坑,主要是有墙,请仔细阅读每个步骤 文档包含以下内容: l 环境搭建 l 创建demo并 ...
- webpack配置(使用react,es6的项目)
const path = require('path');const webpack = require('webpack');const HtmlWebpackPlugin = require('h ...
- webpack(二)解析es6并打包
一.前言 ECMAScript 6(ES6)的发展速度非常之快,但现代浏览器对ES6新特性支持度不高,所以要想在浏览器中直接使用ES6的新特性就得借助别的工具来实现.Babel是一个广泛使用的转码器, ...
- walle多渠道打包+Tinker(bugly)热更新集成+360加固(乐固)
这三个东东是干啥的相信大家都有所耳闻了,如果你没有听说过,请出门左拐,百度一下你就知道.这里不对这三个东东具体的集成方式做详细的介绍,因为官方文档已经写的很详细了,主要是对同时使用这三个东东时所需要注 ...
- Egret打包App Android热更新(4.1.0)
官网教程:http://developer.egret.com/cn/github/egret-docs/Native/native/hotUpdate/index.html 详细可看官网教程,我这里 ...
- webpack的热更新
webpack的热更新是如何做到的?说明其原理? webpack的热更新又称热替换(Hot Module Replacement),缩写为HMR. 这个机制可以做到不用刷新浏览器而将新变更的模块替换掉 ...
- webpack 配置react脚手架(二):热更新
下面继续配置 webpack dev server hot module replacement: 首先配置dev-server 安装 npm i webpack-dev-ser ...
随机推荐
- 使用java求高精度除法,要求保留N位小数
题目要求是高精度除法,要求保留N位小数(四舍五入),并且当整数部分为0时去除0的显示 import java.math.BigDecimal; import java.util.Scanner; pu ...
- windows server 2012 iis8.0部署mvc报错
一开始以为需要在服务器装mvc在很多论坛找过也问了朋友都说需要装mvc,经过两天研究是不需要装mvc的只需要在项目的bin文件夹下放入下面三个dll. 未能加载文件或程序集“System.Web.Ht ...
- windows 下安装nodejs及其配置环境
第一步:下载安装文件下载nodejs,官网:http://nodejs.org/download/,我这里下载的是node-v0.10.28-x86.msi,如下图: 第二步:安装nodejs下载完成 ...
- SmartPhone手机网站的制作
刚开始努力有点偏,看到响应式网站去了,其实主要是要用JQuery Mobile 做一个像应用的网站. JQuery Mobile的教程 http://www.hongkiat.com/blog/bui ...
- YII 主题
heming是一个在Web应用程序里定制网页外观的系统方式.通过采用一个新的主题,网页应用程序的整体外观可以立即和戏剧性的改变. 在Yii,每个主题由一个目录代表,包含view文件,layout文件和 ...
- POJ-3261-Milk Patterns(后缀数组)
题意: 给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠. 分析: 先二分答案,然后将后缀分成若干组. 不同的是,这里要判断的是有没有一个组的后缀个数不小于k. 如果有,那么存在k ...
- 字符串(后缀自动机):NOI 2016 优秀的拆分
[问题描述] 如果一个字符串可以被拆分为 AABB 的形式,其中 A 和 B 是任意非空字符串, 则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 aabaabaa,如果令 A = aab, B ...
- iconv gbk字符转utf8字符
直接上代码 bool gbk2utf8(const char* src, char* dest, size_t inlen) { const char *inbuf = src; size_t out ...
- postgresql使用文档之一 初始化数据存储区
17.2. 创建一个数据库集群(Database Cluster) 在你能做任何事情之前,你必须在磁盘上初始化一块存储空间.我们称这为一个数据库集群(database cluster). 一个Data ...
- 《JavaScript语言精髓与编程实践》读书笔记二
第3章非函数式语言特性 这一章首先介绍了语言的分类,命令式(结构化编程,面向对象编程),说明式(函数式等).而这一章,主要介绍JS的非函数式特点. 在开始之前,首先介绍了由“结构化编程”向“面向对象编 ...