最近一段时间没有写react.js,发现webpack已经完全升级为2.0了,升级后导致以前的项目不能正常编译,只能重新实践一番

关于webpack2.0和1.x的区别概括起来就是tree shaking , es6, 一堆config文件不同的写法

tree shaking,简单描述就是就是真正意义上的按需打包,webpack1.0时代只要引入的包就打到合并的js文件中,即使是分包也无法处理那些没有使用的model,最后导致打包文件包括很多无用的内容,特别是SPA项目。

通过名叫 “tree-shaking” 的技术使打包的结果只包括实际用到的 exports。Three-shaking 的关键在于依赖 ES6 模块的静态结构。“静态结构”意味着在编译时他们是可分解的,而不用执行它们的任何代码,简单理解是ES6导出的部分如果在其它模块没有调用。

一.create项目

mkdir  project
type nul > package.json

  

二.安装webpack

npm install webpack --save-dev

三.安装css相关的loader

npm install style-loader css-loader  --save-dev

四.为了开发方便,安装webpack-dev-server

npm install --save-dev webpack-dev-server

  

五.为了方便编译,需要编译ES6语法和react语法,因为本例使用redux官网的一个列子中的代码,其中有地方用到stage0 stage2,所有还要引入这2个依赖

npm install --save-dev babel-core babel-loader babel-preset-es2015
npm install --save-dev babel-preset-react babel-preset-stage-0 babel-preset-stage-2

这里注意的是.bable文件配置格式从1.0迁移到2.0后变化很大,主要是.babelrc配置格式不同了

1.0可以这么配置,2.0如果这么配置将会报错

{presets: ['es2015']
}

正确的配置 modules 表示是否转行为commonjs方式,这里选择false  loose 使编译后的代码不需要完全遵循ES6规定, 简化编译后的代码, 提高代码执行效率,这里可以不使用这个模式

{"presets": [["es2015", {"modules": false, "loose": true}],"stage-0","stage-2","react"]
}

 

六 react相关

npm install --save-dev react react-dom react-redux redux

  

 

七.其他有用的依赖

extract-text-webpack-plugin css分包用
html-webpack-plugin 文件js css引入替换模版用
npm install --save-dev path extract-text-webpack-plugin html-webpack-plugin

 

八.webpack文件

关于写法问题,最大的就是使用roles use语法,但是发现babel-loader使用官网介绍的use时候,无法编译语法,有兴趣的可以研究下为什么?

module: {rules: [{test: /\.js$/,exclude: /(node_modules|bower_components)/,use: {loader: 'babel-loader',options: {presets: ['env']}}}]
}  

官网推荐的使用babel-preset-env这个库,这个库可以制定编译支持什么浏览器,不过我使用后无法识别一些前沿的语法,只能弃用

最后找了个网上的用法,不使用use写法,配置.babelrc文件的写法。

开发环境


const path = require('path'); // 导入路径包
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {devtool: 'eval-source-map', //开启sourceMap便于调试entry: './src/index.js', //入口文件output: {path: path.resolve(__dirname, 'build'), // 指定打包之后的文件夹filename: '[name].js' // 可以打包为多个文件},// 使用loader模块module: {rules: [{test: /\.css$/,use: ['style-loader', {loader: 'css-loader',options: {// modules: true // 设置css模块化,详情参考https://github.com/css-modules/css-modules}}]}, {test: /\.(jsx$|js)$/,loader: 'babel-loader', exclude: /(node_modules|bower_components)/, //需要排除的目录include: __dirname}]},// 配置devServer各种参数devServer: {hot: true, // 配置HMR之后可以选择开启historyApiFallback: true, // 不跳转inline: true // 实时刷新},plugins: [new HtmlWebpackPlugin({template: './index.html' // 模版文件}),new webpack.HotModuleReplacementPlugin() // 热加载插件]
}

 

生产环境 


const path = require('path'); // 导入路径包
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var CleanPlugin = require('clean-webpack-plugin')//webpack插件,用于清除目录文件module.exports = {entry: './src/index.js', //入口文件output: {path: path.resolve(__dirname, 'build'), // 指定打包之后的文件夹filename: '[name]-[hash].js' // 可以打包为多个文件},// 使用loader模块module: {rules: [{test: /\.css$/,use: ['style-loader', {loader: 'css-loader',options: {}}]}, {test: /\.(jsx$|js)$/,loader: 'babel-loader', //此处不能用use,不知道为啥exclude: /(node_modules|bower_components)/, //需要排除的目录include: __dirname}]},plugins: [new HtmlWebpackPlugin({template: './index.html' // 模版文件}),new CleanPlugin(['build']),new webpack.optimize.CommonsChunkPlugin({name: 'vendors' // 将公共模块提取,生成名为`vendors`的chunk}),new webpack.optimize.UglifyJsPlugin({ //压缩js代码compress: {warnings: false}}),new ExtractTextPlugin('[name]-[hash].css'),//定义环境变量production,定义后就不不把提示的东西打包进去new webpack.DefinePlugin({'process.env': {NODE_ENV: '"production"'}})]
}

  

 

例子的地址,仅供学习https://github.com/xiashan17/SPA-REDUX

  

  

转载于:https://www.cnblogs.com/xiashan17/p/7049804.html

使用webpack2.0 搭建react.js项目相关推荐

  1. 基于vue-cli搭建VUE.js项目

    基于vue-cli搭建VUE.js项目 准备工作 开始安装 搭建工程 目录结构 搞定!! 准备工作 1.node.js 2.vue-cli 3.webpack 开始安装 Node.js 点击去下载No ...

  2. sublime67linter-php,Sublime Text 3 搭建 React.js 开发环境

    Sublime有很强的自定义功能,插件库很庞大,针对新语言插件更新很快,配合使用可以快速搭建适配语言的开发环境. 支持ES6, React.js, jsx代码高亮,对 JavaScript, jQue ...

  3. Sublime Text 3 搭建 React.js 开发环境

    Sublime有很强的自定义功能,插件库很庞大,针对新语言插件更新很快,配合使用可以快速搭建适配语言的开发环境. 1. babel-sublime 支持ES6, React.js, jsx代码高亮,对 ...

  4. 如何利用webpack4.0搭建一个vue项目

    作为一个初学者,记录自己踩过的坑是个好的习惯.我本身比较懒,这里刚好有时间把自己的搭建过程记录一下 这里是参考文章   https://www.jianshu.com/p/1fc5b5151abf 文 ...

  5. 从零搭建react + webpack项目

    初始化项目 mkdir my-react cd my-react npm init 安装 webpack npm install webpack webpack-cli --save-dev 最简单的 ...

  6. java web 显示项目下的图片_[适合初中级Java程序员修炼手册从0搭建整个Web项目](一)...

    前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206种一棵树最好的时间是十年前,其次是现在 six-finger-web 一个Web后端 ...

  7. apache为什么更适合处理动态请求_[适合初中级Java程序员修炼手册从0搭建整个Web项目](一)...

    前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206种一棵树最好的时间是十年前,其次是现在 six-finger-web 一个Web后端 ...

  8. java web项目_[适合初中级Java程序员修炼手册从0搭建整个Web项目](二)

    前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206种一棵树最好的时间是十年前,其次是现在 six-finger-web 一个Web后端 ...

  9. 用yeoman搭建react画廊项目笔记

    1.安装yeoman   npm install yo -g yo --version //检测 yeoman版本,成功显示版本号,则安装成功 2.到yeoman官网 http://yeoman.io ...

最新文章

  1. Android中Context 的理解
  2. 英伟达发布“空气CPU”,Arm架构专为AI而生,性能超x86十倍,与自家GPU更搭
  3. JAVA中文字符串编码--GBK转UTF-8
  4. Spring 核心容器类BeanDefinitionReader
  5. ZooKeeper available but no active master location found
  6. 前端抢饭碗系列之Vue项目如何做单元测试
  7. 【今日CV 计算机视觉论文速览 第109期】Wed, 1 May 2019
  8. 给大家安利一个买电脑好去处(内有福利)
  9. 扇贝有道180906每日一句
  10. Java解析魔兽争霸3录像W3G文件(二):压缩数据块解压合并
  11. Visual C++ 内存泄露检测工具(VLD)
  12. Python安装jpype,注意版本对应
  13. 联想笔记本怎么进入pe系统_联想笔记本怎么进入bios设置u盘启动新方法
  14. 五大领域总目标指南_幼儿园五大领域总目标
  15. 17 线性方程组——线性方程组解的结构、解的性质、解空间、基础解系、基础解系存在性
  16. Capture web with FireShot
  17. Centos 7分辨率调整成适应虚拟机屏幕大小
  18. pikachu全网最详细安装教程
  19. 1000x计算机 案例解析,索尼WI-1000X耳机连接win10电脑方法讲解
  20. Hybrid charging scheduling schemes for three-dimensional underwater wireless rechargeable sensor net

热门文章

  1. python的数组和元组区别_python中数组,列表,元组的区别、定义、功能
  2. 2013河北省职称计算机应用能力考试操作题答案,2013河北省职称计算机应用能力考试操作题步骤详解(部分).doc...
  3. 织梦动态PHP可以删除吗,DeDe织梦cms如何全站动态化,取消静态功能
  4. Java状态模式实现工作流_关于使用“状态模式”做工作流概要。
  5. SystemView软件中“Butterworth Lowpass IIR“的完美设置
  6. 从MATLAB帮助文档上学习 chirp
  7. 《敏捷制造——敏捷集成基础结构设计》——1.2相关问题的国内外研究现状
  8. UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]
  9. hdu 1043 Eight 搜索,哈希
  10. Ajax 通过 Request Payload 体发送 JSON 数据体