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

发布时间 - 2026-01-11 02:41:46    点击率:

本文介绍了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插件,可以在界面实时显示错误信息。

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


# webpack2配置react  # webpack2  # react  # JavaScript webpack5配置及使用基本介绍  # 详解node.js中的npm和webpack配置方法  # webpack教程之webpack.config.js配置文件  # JavaScript自定义Webpack配置实现流程介绍  # 配置文件  # 可以用  # 要用  # 自定义  # 值为  # 新建一个  # 后期  # 您的  # 几个  # 如果您  # 目录下  # 不吝赐教  # 不太  # 不需要  # 如有  # 之处  # 没有任何  # 已被  # 又有  # 推荐使用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel怎么为数据库表字段添加索引以优化查询  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  利用vue写todolist单页应用  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  Android滚轮选择时间控件使用详解  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  微信小程序 scroll-view组件实现列表页实例代码  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  如何破解联通资金短缺导致的基站建设难题?  EditPlus 正则表达式 实战(3)  如何在阿里云虚拟服务器快速搭建网站?  北京网站制作的公司有哪些,北京白云观官方网站?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  php 三元运算符实例详细介绍  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  动图在线制作网站有哪些,滑动动图图集怎么做?  如何在Windows 2008云服务器安全搭建网站?  JavaScript如何实现倒计时_时间函数如何精确控制  如何在建站之星网店版论坛获取技术支持?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  浅谈Javascript中的Label语句  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Python制作简易注册登录系统  千库网官网入口推荐 千库网设计创意平台入口  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel如何使用Sanctum进行API认证?(SPA实战)  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  C#如何调用原生C++ COM对象详解  ,怎么在广州志愿者网站注册?  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  如何用VPS主机快速搭建个人网站?  Android自定义listview布局实现上拉加载下拉刷新功能