webpack前端项目构建框架续

2023-05-16

    在前一篇文章中,介绍webpack构建普通web项目,一般而言没有太大的意义,我们需要使用webpack构建es6,react等这些新的语法或者特性的项目,因为涉及了很多语法的转换,所以打包的时候,我们需要注意配置。

    这个例子中,我们通过webpack构建一个react项目,还是之前的示例,只不过我们使用react语法来实现,另外考虑使用es6的一些语法比如export,import这些来导出或者加入模块。因为涉及到react的jsx语法以及es6的相关语法,所以项目中需要使用babel来转换,我们需要加入babel-core ,babel-loader,babel-preset-env,babel-preset-react这些构建依赖。另外我们需要使用react,我们还需要加入react,react-dom依赖。babel-loader依赖目前最高是8,但是依赖的babel-core是7,但是官方的babel-core最高而且release的版本是6,为了让babel-loader能够正常,我们需要手动增加babel-loader@7.1.5版本来作为依赖。

    npm install react react-dom --save

    npm install babel-core babel-loader@7.1.5 babel-preset-env babel-preset-react --save-dev

    也许你已经注意到了,他们一个是开发中需要的依赖,一个是构建时需要的依赖。他们一个会加入到package.json文件的dependencies下,一个会加入devDependencies下。

    

    改造我们的项目,我们需要修改的文件有greeter.js,index.js,webpack.config.js,新增一个config.json文件,作为greeter.js文件中的一个配置项greeterText的内容。

    config.json

{
  "greeterText":"hello,react."
}

    greeter.js

import React,{Component} from 'react'
import config from './config'
class Greeter extends Component {
  render(){
    return <div>{config.greeterText}</div>;
  }
}
export default Greeter

    index.js

import React from 'react'
import ReactDOM from 'react-dom'
import Greeter from './greeter'
ReactDOM.render(
<Greeter />
,
document.getElementById("root"))

    webpack.config.js 

module.exports = {
  entry: __dirname+"/src/index.js",
  output:{
    path:__dirname+"/public",
    filename:'bundle.js'
  },
  mode:"development",
  devServer:{
    contentBase:__dirname+"/public",
    historyApiFallback:true,
    inline:true
  },
  module:{
    rules :[
      {
      test:/(\.jsx|\.js)$/,
      use : {
        loader:'babel-loader',
        options :{
           presets:['env','react']
        }
      },
      exclude:/node_modules/
      }
    ]
  }
}

   运行webpack构建

    

    运行webpack-dev-server --open

     

    浏览器运行结果:

    

    这里可以改进webpack.config.js的配置,就是将presets选项presets:["env","react"]加入到.babelrc中,webpack会自动加载读取这个配置:

    .babelrc

{ 
  "presets":["env","react"]
}

  webpack.config.js就改成这个样子:

module.exports = {
  entry: __dirname+"/src/index.js",
  output:{
    path:__dirname+"/public",
    filename:'bundle.js'
  },
  mode:"development",
  devServer:{
    contentBase:__dirname+"/public",
    historyApiFallback:true,
    inline:true
  },
  module:{
    rules :[
      {
      test:/(\.jsx|\.js)$/,
      use : {
        loader:'babel-loader'
      },
      exclude:/node_modules/
      }
    ]
  }
}

    需要注意的是,这里如果在配置module中test正则表达式的时候,如果配置的不太精确,比如test : /(\.jsx|\.js)/ 这样,这种正则既能匹配js也能匹配json,而webpack打包不应该将json文件也来打包,否则会报错,如下所示: 

ERROR in ./src/config.json
Module build failed (from ./node_modules/babel-loader/lib/index.js):
SyntaxError: C:/Users/Administrator/Documents/GitHub/webpackdemo/src/config.json: Unexpected token, expected ; (2:
15)

  1 | {
> 2 |   "greeterText":"hello,react."
    |                ^
  3 | }

        出错的原因是将config.json文件也做了打包,这样作为js来解析,肯定会出错。所以test这里需要精确匹配 /(\.jsx|\.js)$/,刨掉json后缀。

     另外,我们在开发react项目的时候,经常会发现index.html文件中并没有引入js文件,但是当我们输入npm start进行编译并启动服务的时候,打开的页面会加载很多js,而且react的组件都会被加入进来,前面我们使用了在index.html文件中通过<script type="text/javascript" src="bundle.js"></script>引入了打包好的bundle.js文件,这里我们通过html-webpack-plugin插件来实现不用手动加入任何js文件,就能实现js自动注入的功能。

    首先我们需要安装html-webpack-plugin依赖。

    npm install html-webpack-plugin --save-dev

    其次,我们需要增加一个模板文件:index.tmpl.html文件,就是什么js都不引入的一个html文件。这里,为了与以前的public文件夹区分,我们将index.tmpl.html文件加入app目录,将生成的文件index.html加入到build目录。

    index.tmpl.html

<!doctype html>
<html>
  <head>
           <meta charset="UTF-8" />
           <title>html-webpack-plugin</title>
  </head>
  <body>
          <div id="root"></div>
  </body>
</html>

   修改 webpack.config.js,加入html-webpack-plugin配置。

var HtmlWebpackPlugin = require("html-webpack-plugin")
module.exports = {
  entry: __dirname+"/src/index.js",
  output:{
    path:__dirname+"/build",
    filename:'bundle.js'
  },
  mode:"development",
  devServer:{
    contentBase:__dirname+"/build",
    historyApiFallback:true,
    inline:true
  },
  module:{
    rules :[
      {
      test:/(\.jsx|\.js)$/,
      use : {
        loader:'babel-loader'
      },
      exclude:/node_modules/
      }
    ]
  },
  plugins:[
    new HtmlWebpackPlugin({
      template:__dirname+'/app/index.tmpl.html'
    })
  ]
}

    构建,并运行,查看结果:

    

    浏览器显示,从标题title看,是新的页面。

     

    我们可以反过来看看,通过html-webpack-plugin生成的页面index.html是什么样子的,和我们之前手工创建的一模一样:

     

    至此,webpack构建除了css-loader,style-loader没有涉及外,基本的构建以及插件我们也接触了,也了解了一些构建的配置和依赖,简单的webpack.config.js文件已经能够看懂了。webpack构建只是项目开发的一小部分,不用花太多的时间折腾,最主要的还是项目本身的编码。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack前端项目构建框架续 的相关文章

  • hdfs常见操作java示例

    我们学习hadoop xff0c 最常见的编程是编写mapreduce程序 xff0c 但是 xff0c 有时候我们也会利用java程序做一些常见的hdfs操作 比如删除一个目录 xff0c 新建一个文件 xff0c 从本地上传一个文件到h
  • MapReduce编程开发之数据去重

    MapReduce就是一个利用分而治之的思想做计算的框架 xff0c 所谓分 xff0c 就是将数据打散 xff0c 分成可以计算的小份 xff0c 治就是将数据合并 xff0c 相同键的数据合并成一个集合 MapReduce并不能解决所有
  • MapReduce编程开发之求平均成绩

    MapReduce计算平均成绩是一个常见的算法 xff0c 本省思路很简单 xff0c 就是将每个人的成绩汇总 xff0c 然后做除法 xff0c 在map阶段 xff0c 是直接将姓名做key 分数作为value输出 在shuffle阶段
  • MapReduce编程开发之数据排序

    MapReduce的数据排序 xff0c 其实没有很复杂的实现 xff0c 默认在shuffle阶段 xff0c MapReduce就帮我们将数据排好序了 xff0c 我们在Map和Reduce阶段 xff0c 无需做额外的操作 MapRe
  • MapReduce编程开发之倒排索引

    倒排索引是词频统计的一个变种 xff0c 其实也是做一个词频统计 xff0c 不过这个词频统计需要加上文件的名称 倒排索引被广泛用来做全文检索 倒排索引最终的结果是一个单词在文件中出现的次数的集合 xff0c 以下面的数据为例 xff1a
  • ROS2学习笔记(五)-- ROS2命令行操作常用指令总结(一)

    简介 xff1a 在前面的章节中 xff0c 我们先简单学习了ROS2的话题发布和订阅 xff0c 两种操作都是通过python代码实现的 xff0c 而在实际应用过程中 xff0c 我们会经常用到命令行操作来辅助调试 xff0c 更进一步
  • 实例演示ElasticSearch索引查询term,match,match_phase,query_string之间的区别

    通常在面试elasticsearch中 xff0c 面试官会问一个关于查询的问题 xff0c 就是term查询和match查询有什么区别 xff1f 如果你对这两个查询不清楚 xff0c 面试官会认为你没有用过elasticsearch x
  • Elasticsearch使用update_by_query

    elasticsearch中有一个方法是批量修改 xff0c 就是先查询出需要修改的索引记录 xff0c 然后批量修改 这个本来没什么 xff0c 但是使用过的都知道 xff0c 用java来调用这个方法很别扭 一般来说 xff0c 我们使
  • C++中实现字符串分隔split方法

    C 43 43 中 xff0c 除了没有直接的求数组长度的方法外 xff0c 也没有直接对字符串分隔的方法 xff0c 需要我们自己来实现 xff0c 下面结合字符串分隔的问题 xff0c 做一个面试题 xff0c 面试题是这样的 xff0
  • c++编程实现简单mapreduce程序

    hadoop提供了java版本的mapreduce编程API xff0c 我们需要自定义编写mapper和reducer xff0c 分别继承Mapper和Reducer xff0c 然后重写map和reduce方法 同时需要在main方法
  • windows下安装MongoDB压缩版

    MongoDB在windows上一般提供msi的安装方式 xff0c 这种安装方式相对简单 xff0c 界面安装 xff0c 这里介绍解压缩版本的安装 xff0c 我们需要下载的是zip包 xff0c 然后解压 xff0c 这里下载之后 x
  • python3安装以及安装pip之后出现的问题

    python3在windows10上的安装 xff0c 为了省事 xff0c 直接下载的是python 3 7 4 embed adm64 zip免安装版本 xff0c 下载解压 xff0c 然后将python目录加入环境变量的path中
  • eclipse安装pydev插件开发python程序

    做Java开发的 xff0c 想学习python xff0c 可以不用安装别的pycharm IDE xff0c 我们直接通过在eclipse中安装一个python插件pydev即可 xff0c 前提是你的机器上已经安装了python xf
  • docker私有镜像服务搭建

    docker容器技术已经在部署服务上使用的非常普遍 xff0c 主要是它的隔离性以及快速启动的特性 xff0c 一般启动一个容器 xff0c 如果镜像不存在会先去dockerhub仓库下载 xff0c 然后存储在本地 xff0c 后续可以继
  • vs2017开发第一个desktop应用程序

    desktop应用程序也叫窗口程序 xff0c 我们平时在电脑上安装的APP xff0c 都是桌面程序 xff0c 比如QQ xff0c 各种播放器 xff0c 包括浏览器 桌面程序最主要的特点 xff0c 就是点击运行之后 xff0c 会
  • 量子编程入门第一篇环境搭建dotnet-sdk+Microsoft.Quantum.IQSharp+python3.6+qsharp

    量子编程已经提上日程 xff0c 微软提供了quantum开发工具包 Microsoft Quantum Development Kit简称QDK xff0c 在visual studio 2019环境下 xff0c 可以安装quantum
  • ROS2学习笔记(十)-- ROS2 launch启动文件

    简介 xff1a 接触过ROS1的同学对launch肯定不陌生 xff0c 在ROS1中 xff0c 我们常用launch实现node和master同时启动 多节点同时启动配置等功能 xff0c ROS2中的launch也是用于多节点启动
  • 记录一次解决TypeError: 'NoneType' object is not callable的办法

    如题所示 xff0c 这是python运行时报错 xff0c 关键信息就是 xff1a TypeError 39 NoneType 39 object is not callable xff0c 错误栈信息如下 xff1a 有的文章提示 x
  • windows下VC++6.0编写c++程序连接mysql示例

    windows下通过c 43 43 编码连接mysql数据库 xff0c 需要做一些设置 xff0c 因为我们需要连接mysql并执行相关操作 xff0c 需要使用mysql提供的api xff0c 这api在mysql h头文件中定义了
  • windows修改cmd命令行字体

    默认情况下 xff0c windows命令行字体只有两种 xff0c 点阵字体和新宋体 如果你想使用系统自带的其他字体 xff0c 需要更改注册表 这里介绍如何修改 windows系统字体在目录C Windows Fonts 下 xff0c

随机推荐

  • centos7安装与配置DNS服务器

    centos7上安装DNS服务器可以实现域名与IP的双向解析 xff0c 即通过域名可以找到主机IP xff0c 也可以通过IP找到域名 在postfix搭建邮件服务器中 xff0c 需要用到DNS正向解析与反向解析 xff0c 因此DNS
  • springboot项目单元测试

    springboot项目和普通的spring项目一样也可以做单元测试 xff0c 一般是测试service层的方法 xff0c 在进行项目构建的时候 xff0c 需要在springboot默认依赖的基础上 xff0c 再加上spring b
  • ipfs星际文件系统初体验

    ipfs是InterPlanetary File System的简称 xff0c 即星际文件系统 xff0c 他不同于一般的操作系统文件系统 xff0c 也不同于分布式文件系统 xff0c 因为分布式文件系统最终访问文件还是采用的http协
  • truffle构建以太坊应用并测试第一个helloworld智能合约

    最近因为国家对区块链又重视起来了 xff0c 相信今年年底到明年年初会是一个区块链的新的爆发点 xff0c 也是碰巧学习了一下以太坊构建区块链应用 xff0c 以前都是简单的了解 xff0c 并没有实际动手演练 今天趁机会也学习一下区块链
  • docker启动报错:standard_init_linux.go:211: exec user process caused "no such file or directory"

    如题所示 xff0c 根据自己构建的镜像启动docker容器 xff0c 直接退出 xff0c 查看容器日志报错信息 xff0c 没有任何别的信息 网上搜索这个问题 xff0c 发现很多人都遇到过 xff0c 解决办法也各不相同 xff0c
  • windows下telnet回显解决办法

    telnet相信大家都用过 xff0c 在tcp连接中 xff0c 我们可以用来模拟发送客户端请求 xff0c 当我们输入telnet 127 0 0 1 8888连接本机的tcp 8888端口时 xff0c 连接成功后 xff0c 会进入
  • springboot与flyway集成做数据迁移

    flyway是一种用来做数据迁移的框架 xff0c 如果你的项目不是jpa 43 hibenate xff0c 比如使用的mybatis xff0c 那么你需要在实体创建之前 xff0c 在数据库中生成表结构 xff0c 然后逆向工程 xf
  • ROS2学习笔记(十一)-- ROS2 bag数据记录与回放

    简介 xff1a ROS2提供了ros2 bag命令 xff0c 可以记录指定主题的数据到文件中 xff0c 也可以将记录下的内容再发布出来 xff0c 相当于是数据的回放 xff0c 除了通过命令行的方式实现数据记录以外 xff0c 也可
  • C++实现简单链表

    链表是最常用的一种数据结构 xff0c 无论什么语言 xff0c 学习数据结构 xff0c 都绕不开链表 xff0c 下面通过c 43 43 来实现简单链表 xff0c 所谓简单链表 xff0c 就是构建链表 xff0c 然后遍历打印链表
  • 二分查找算法介绍

    二分查找算法的实现过程如下 xff1a 在排序数组中查找某一个数据项 xff0c 首先让待查数据与中间下标元素开始比较 xff0c 如果相等则返回 xff0c 如果小于中间下标元素 xff0c 重新开始从低位开始 xff0c 中间下标 1
  • centos7下安装gitlab-ci持续集成实战

    gitlab提供了ci cd持续集成 持续部署的功能 xff0c 当我们安装了gitlab之后 xff0c 需要单独再安装gitlab ci multi runner xff0c 其实就是gitlab runner xff0c 为了试验 x
  • centos7下安装单机版kubernetes实战

    kubernetes是docker分布式解决方案 xff0c 是当前最火的docker解决方案 xff0c 一般初学者适合玩单机安装 kubernetes安装很简单 xff0c 只需要通过yum安装etcd kubernetes即可 默认k
  • c++使用malloc来做内存分配创建链表

    c 43 43 中创建链表可以直接通过new对象的方式创建节点 xff0c 然后将节点之间的关系通过next指针来关联起来 xff0c 另外 xff0c 也可以通过malloc来分配内存 xff0c 创建节点 这里介绍如何通过malloc来
  • javascript模块化编程commonjs,cmd,amd规范之间的区别

    模块化编程是javascript语言的一个特性 xff0c 其实不光javascript语言有模块化思想 xff0c java9也支持模块化 xff0c 所以说模块化是一种编程的趋势 xff0c 也是一种新的解决方案 模块化编程将我们以前单
  • postgresql开启类似mysql查询语句后面跟\G一样按行展示列数据选项

    通常 xff0c 我们在使用数据库的时候 xff0c 为了让单条记录看着更清晰 xff0c 不会被控制台长度折断 xff0c 会将记录按行来展示 xff0c 在mysql数据库中 xff0c 查询语句后面跟上 G就可以实现这个效果 xff0
  • linuxmint下通过eclipse安装android开发环境sdk,adt并新建与启动项目各种踩坑

    最近安装了linuxmint19 2系统 xff0c 这个系统是ubuntu系列 xff0c 适合桌面操作系统 xff0c 据说比ubuntu好 可以先看看系统的一些特征 xff1a 这里的系统设置 xff0c 很像mac系统 xff0c
  • 安卓手机开启开发者选项

    一般我们将安卓手机通过数据线连接到电脑 xff0c 会提示将手机用于干什么 xff0c 有传输文件选项 xff0c 充电选项 xff0c 开发者调试选项 我们选择充电之后 xff0c 再不会出现这个提示 有的手机开发者选项不会显示在设置界面
  • webpack前端项目构建框架

    前端项目构建框架有很多 xff0c 常见的有grunt xff0c gulp xff0c 为什么还有webpack呢 xff1f 前端构建工具一般都是将js合并压缩 xff0c css合并压缩 xff0c 以达到减少体积 xff0c 提高加
  • 两轮差速小车循线控制原理分析

    硬件资料设定 xff1a 小车驱动来自于两个相同的电机 xff0c 转向依靠两轮差速实现 xff0c 小车前后左右安装超声波传感器 xff0c 前后各一个 xff0c 左右各两个 xff1b 功能目标 xff1a 假设小车左侧有墙壁 xff
  • webpack前端项目构建框架续

    在前一篇文章中 xff0c 介绍webpack构建普通web项目 xff0c 一般而言没有太大的意义 xff0c 我们需要使用webpack构建es6 xff0c react等这些新的语法或者特性的项目 xff0c 因为涉及了很多语法的转换