webpack 2.x配置reactjs基本开发环境详解


Posted in Javascript onAugust 08, 2017

本文介绍了webpack 2.x配置reactjs基本开发环境详解,分享给大家,具体如下:

当前webpack版本:2.2;react: 15.4.2

webpack从1.x升级到2.x替换了几个接口,包括module.loaders这样的重要接口已被弃用(详细变更)。官网目前已不推荐使用1.x版本,早上折腾一番,根据2.2版本配置了react基本的开发环境,满足不太复杂的web应用开发,后期会逐步优化配置文件。

如果您之前使用过webpack,需要改动的地方并不大。下文假定您没有接触过类似的打包工具(但了解npm、jsx再好不过),以跟我一样一个新手的身份认识这些,如有不妥之处望不吝赐教。

如果您的react项目是引入的以下三个js文件在浏览器端编译jsx,那么不需要用webpack做开发环境。

<script src="https://cdn.bootcss.com/react/15.4.2/react.min.js"></script>
 <script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script>
 <script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script>

但是在产品上线阶段,我们很不推荐这样做。1,用户需要下载这三个文件,浪费了带宽;2,下载完成后需要在浏览器端编译jsx文件,浪费了时间和资源。

如果将开发阶段的项目代码打包编译为一个js文件,再推上线,那么:1,将HTTP请求减少为1个;2,不需要用户端再浪费时间和资源去编译,直接运行上线前已编译好的js代码。

如果是前者,引入项目js代码的script标签type值为"text/babel";如果是后者,type值为"text/javascript"。

如何做?

一,安装nodejs,使用它附带的npm包管理工具。为什么要用npm?后期会下载react依赖、babel依赖、webpack工具,使用npm方便很多。不使用npm也可以,但无疑会增加诸多困难。

二,新建一个项目文件夹,在文件夹内打开终端,即Windows下的命令行(Shift+鼠标右键),运行 npm init ,如果没有特殊要求,可一直按回车键到最后一步。

三,在终端内执行如下命令下载需要的所有依赖和工具。

npm install react react-dom babel-loader babel-core babel-preset-es2015 webpack webpack-dev-server --save-dev

四,配置webpack配置文件。在根目录下,即与package.json同级下新建webpack.config.js文件,在文件内部写入如下内容

// webpack.config.js
var webpack = require("webpack");
var path = require("path");

module.exports = {
  entry: './dev/entry.jsx', // 入口文件
  devtool: 'source-map',// 调试时定位到编译前的代码位置,推荐安装react插件
  output: {
    path: path.resolve(__dirname, "./dist/js/"),
    filename: 'bundle.js' // 打包输出的文件
  },
  module: {
    rules: [{
      test: /\.jsx?$/, // test 去判断是否为.js或.jsx,是的话就是进行es6和jsx的编译
      exclude: /(node_modules|bower_components)/,
      loader: 'babel-loader',
      query: {
        presets: ['es2015', 'react']
      }
    }]
  },
  resolve: {
    // 现在你import文件的时候可以直接使用import Func from './file',不用再使用import Func from './file.js'
    extensions: ['.js', '.jsx', '.json', '.coffee']
  }
};

目录结构:

app
  |__dev
  |  |__components
  |  |__entry.jsx
  |__dist
  |  |__css
  |  |__js
  |    |__bundle.js
  |  |__index.html
  |__node_modules
  |__package.json
  |__webpack.config.js

对于这份配置文件有如下说明

1,标红的部分可自定义

2,react项目文件可以用js格式,也可以用jsx格式,但是输出文件为在HTML文件中引用的文件,必须为js格式。

3,本配置入口文件在dev目录下,输出文件在dist目录下,具体可自定义配置。

4,module.rules为2.x新增的接口,代替原先使用的module.loaders

5,去掉query会报错,也可将其规则写入package.json文件,具体写法见参考链接

五,在package.json文件scripts部分添加如下代码

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "start": "webpack-dev-server --hot --open --content-base ./dist/",
  "deploy": "webpack -p --progress --config webpack.config.js"
 },

注:--content-base参数指定根html文件所在位置。

六,开发阶段在终端使用 npm start 自动编译代码并刷新;使用 npm run build 编译生产环境代码。

注:webpack-dev-server自动编译代码和刷新浏览器并不会将编译后的文件写入磁盘,而是保持在内存中,因此此时在html文件中引入的脚本文件src为"bundle.js",没有任何路径,如果在webpack.config.js的ouput中指定了"publicPath",情况又有所不同,详见参考链接第三个。

附:webpack编译过程中常用的参数,可在scripts编译命令中分别配置

  • webpack 开发环境下编译
  • webpack -p 产品编译及压缩
  • webpack --watch 开发环境下持续的监听文件变动来进行编译(非常快!)
  • webpack -d 引入 source maps

eslint支持:

npm i eslint babel-eslint eslint-plugin-react --save-dev

新建一个.eslintrc文件,写入react支持基本参数

{
  "plugins": ["react"],
  "extends": ["eslint:recommended", "plugin:react/recommended"],
  "parser": "babel-eslint"
}

推荐安装编辑器对应的eslint插件,可以在界面实时显示错误信息。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
详解JavaScript语言的基本语法要求
Nov 20 Javascript
vue实现可增删查改的成绩单
Oct 27 Javascript
Bootstrap选项卡动态切换效果
Nov 28 Javascript
利用Node.js编写跨平台的spawn语句详解
Feb 12 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
JavaScript 面向对象基础简单示例
Oct 02 Javascript
vue中在vuex的actions中请求数据实例
Nov 08 Javascript
微信小程序实现可长按移动控件
Nov 01 Javascript
vue 中使用print.js导出pdf操作
Nov 13 Javascript
vue-quill-editor实现图片上传功能
Aug 08 #Javascript
vue.js评论发布信息可插入QQ表情功能
Aug 08 #Javascript
vuejs使用FormData实现ajax上传图片文件
Aug 08 #Javascript
基于Vue实现支持按周切换的日历
Sep 24 #Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 #Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
Aug 08 #Javascript
React Native如何消除启动时白屏的方法
Aug 08 #Javascript
You might like
MVC模式的PHP实现
2006/10/09 PHP
逐步提升php框架的性能
2008/01/10 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
PHP排序算法类实例
2015/06/17 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
JavaScript使用cookie
2007/02/02 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
原生javascript实现分页效果
2017/04/21 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
会计实习生自我鉴定
2013/12/12 职场文书
招股说明书范本
2014/05/06 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
九年级语文教学反思
2016/03/03 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
服务器SVN搭建图文安装过程
2022/06/21 Servers