Webpack+Babel手把手带你搭建开发环境(内附配置文件)

先简单介绍一下Webpack和Babel

  • Webpack
    webpack工作就是打包,只要你安装的插件就可以打包一切,并且会自动解析依赖项,是前端的热门工具。
  • Babel
    Ecmascript的代码一直在更新 但是浏览器的兼容却没有根上,babel就实现了利用服务端node的 导入导出特性,实现了js代码的渐进增强、平稳退化。让我们可以随意使用新语法而不用考虑浏览器的兼容性问题

环境搭建

新建项目

  • 首先先要创建项目目录 可以看见我的项目目录是webpackdemo
  • 在项目目录下面手动建立了一个src目录
  • 在项目目录使用 npm init 初使用化一下项目,使用命令的时候,一直回车就可以了,最后会生成一个package.json的文件 这是我们项目的配置文件,我们安装的一些第三方包、项目描述等等都可以在里面配置
  • 手动创建webpack的配置文件 touch webpack.config.js 里面放一些webpack的配置

初始化好项目后 我们确定一下搭建一个什么样的环境

  1. 可以自动帮我编译 es6+的代码 为es5
  2. 在我开发的时候还可以热更新 避免我老是手动去重启服务
  3. 可以帮我打包成html,还可以使用图片 导入csss

基于以上几点 我们开始搭建开发环境

为了完成第一项: es6+es5 我们肯定是需要使用babel 我们开始对babel进行配置

我们应该是在打包过程中将es6+es5, 想要打包,应该先安装webpack相关

  • 安装webpack
yarn add webpack -D (-D 参数是安装到devDependencies里面)

然后我们将打包命令配置到 package.jsonscript里面
webpack初打包

可以看到 运行命令时,出现提示 需要webpack-cli 才能运行,照例,我们安装一下

yarn add webpack-cli -D

再次运行

 npm run dev-build

初次打包成功

发现出现了警告 没有设置打包模式 因为我们webpack.config.js 啥也没有,只是测试一下是否可以打包 已经可以成功打包了 默认打包出来的文件在dist里面 然后我们对webpack做一些配置

  • webpack.config.js
const path = require('path');

module.exports = {
    mode: 'development',                        // 配置模式为开发模式 development
    entry: "./src/index.js",                    // 配置打包入口 从哪里开始打包

    output: {
        filename: "bundle.js",                  // 打包出来的文件名加什么也可以自定义
        path: path.resolve(__dirname, 'build')  // 打包出来的文件默认是在dist里面 我想更改也很简单
    },
};

再次运行npm run dev-build已经没有警告了 打包出来的文件名和目录和我们配置的一样

但是现在又面临一个问题,我打包完怎么测试? 我们正常的话是不是需要自己建立一个index.html然后去引用打包出来的js啊,这个好麻烦,webpack里面有一个插件可以帮助我们偷懒,那就是html-webpack-plugin
来安装一下

yarn add html-webpack-plugin -D
  • webpack.config.js 配置html插件
// 引入安装的包
const HtmlWebpackPlugin = require('html-webpack-plugin');

plugins: [
        new HtmlWebpackPlugin({
            template: "./src/index.html", // 首先建立一个模版文件
            filename: "index.html",       // 打包出来的html文件名称
            minify: {
                collapseWhitespace:true             // 一行显示
            },
            hash:true                      // 可以选择加入hash
        })
    ],

效果:
创建html模版

可以看到使用了这个插件 会自动帮你创建script标签 自动引入你打包的文件 这样非常方便
准备工作做的差不多了,该把第一项任务完成一下了。怎么才能让es6+es5代码?

第一项任务:Babel转码

莫要方张,这个很简单。先这样,在那样,然后在这样,就可以了。是不是很简单

要完成这项任务需要安装babel的几个包

  1. yarn add @babel/core -D // babel的核心包 得有
  2. yarn add @babel/preset-env -D // 转es6+ 语法为es5的 你说能少得了?
  3. yarn add babel-loader -D // 你前面安装的是babel的东西 跟我webpack有什么关系? 反正我只认识我自己的东西 所以要安装一个loader 这样才能使用起来
  • webpack.config.js babel的配置
    module: {
        rules: [                                        // 设定规则
            {
                test: /\.js$/,                          // 这个就是一个正常 匹配js文件
                use: [
                    {
                        loader: "babel-loader",         // babel-loader 使用起来
                        options: {
                            presets: [                  // 让他帮我把es6+的代码转es5
                                "@babel/preset-env"
                            ],
                        }
                    }
                ],
                exclude: /node_module/,                 // 但是别全给转啊 我不要转node_module里面的
                include: /src/                          // 我只要src里面的 因为这才是我写的啊
            }
        ]
    }

效果:
未转码
es6代码

已转码
打包es6预览一下源码

可以看到const 已经转成了var 箭头函数已经转成了正常function

但是这个时候只能转换一些简单的 想要使用一些高级语法还是需要装点插件,比如说装饰器?

支持装饰器安装
yarn add @babel/plugin-proposal-decorators -D
支持类里面的静态属性安装 static关键词
yarn add @babel/plugin-proposal-class-properties -D

plugins: [
           ["@babel/plugin-proposal-decorators", {legacy: true}],
           ["@babel/plugin-proposal-class-properties", {loose: true}]
         ]

效果:
装饰器code

装饰器效果

现在虽然打包代码可以了 但是每次我写点东西就要打包,还是很麻烦 我想要他热更新 不用我来每次build, 这个可以使用webpackdevServer (webpack: 我除了打包还是有用的,别瞧不起人)

第二项任务:代码热更新(我喜欢叫它热承载)

安装一下子:

yarn add webpack-dev-server -D

然后加以配置:

  • package.json
// 指定一下webpack-dev-server的配置文件 明白吗?
  "scripts": {
    "start": "webpack-dev-server --config webpack.dev.js --progress --colors",
    "dev": "webpack --config webpack.dev.js"
  },
  • webpack.config.js
    devServer: {
        contentBase: path.join(__dirname, "build"),         // 它指定了服务器资源的根目录,如果不写入contentBase的值,那么contentBase默认是项目的目录。      
        compress: true,                                     // 当它被设置为true的时候对所有的服务器资源采用gzip压缩
        port: 9000,                                         // 服务启动端口
        hot: true                                           // 开启热更新
    },

运行npm run start即可 现在随意更改src/index.js 都可以及时打印 因为他在你的内存里面运行
dev-server-code

dev-server_ok

第三项任务:打包css和jpg等图片

  • 打包css
    安装几个loader就行
yarn add css-loader -D
yarn add style-loader -D
  • webpack.config.js
{
                test: /\.css$/,
                use: [
                    {loader: "style-loader"},           // 将写的css 添加到style标签里面去
                    {loader: "css-loader"},             // 解析import导入方式 和 url()
                ]
},

效果:
使用css-build

可以看到css虽然没有看到 但是我们看一下效果
使用css-效果

看到elements里面 style标签自动插入样式 ok,已经完成css的打包

**注意⚠️:**这里有个坑,因为这个使用到多个loader 所以需要说一下,loader的执行顺序是从右往左执行,也就是先支持import 再去插入节点 如果反了,逻辑也就反了

  1. 打包图片文件
    有两种可以打包图片 一个是url-loader 还有file-loader
    url-loader可以把图片打包成base64 但是大图不太适合 我们这边使用file-loader yarn add file-loader -D配置:
{
    test: /\.(png|jpe?g|gif)$/i,
    loader: 'file-loader',
    options: {
        name: '[name].[ext]',   // 输出名称
        outputPath: './image',   // 输出目录
    },
}

效果:
code使用图片

图片展示效果

源码奉上

项目已经在github上面,如果给到帮助请给个start

参考来源:憧憬在 aoppp.com发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/28831.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用dmhs veri手动比对ORACLE同步到DM数据

使用dmhs veri手动比对ORACLE同步到DM数据 veri介绍 在进行数据库数据的实时同步的时候,需要了解同步的结果是否正确,因此需要有数据对比工具进行数据的对比,并生成详细的对比报告,提供用户参考。对比工具仅仅生成报告&#xff…

Qt下面窗口嵌套,嵌套窗口中包含:QGraphicsView、QGraphicsScene、QGraphicsIte

Qt系列文章目录 文章目录 Qt系列文章目录前言一、嵌套窗口二、注意事项 前言 我们有一个主窗口mainwindow,需要向其中放入新的界面,你可以自己定义里面内容。 Qt的嵌套布局由QDockWidget完成,用Qt Creator拖界面得到的dock布置形式比较固定,…

人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型,利用正态分布数据训练该模型

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型,利用正态分布数据训练该模型。本文将介绍一种基于PyTorch的BiGRU模型应用项目。我们将首先解释BiGRU模型的原理,然后使用PyTorch搭建模型…

在Nginx服务器如何安装SSL证书

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言提示:我用的是阿里云的产品,就以阿里云进行的: 一、下载SSL证书二、安装SSL证书 前言 提示:我用的是阿里云的产…

二叉树及其链式结构

目录 一&#xff1a;树概念及结构 1.树的概念 2.树的相关概念 3.树的表示 二&#xff1a;二叉树的概念及结构 1.概念 2.特殊的二叉树 <1>. 满二叉树&#xff1a; <2>. 完全二叉树&#xff1a; 3.二叉树的性质 4.二叉树的存储结构 <1>.顺序结构 <…

渗透专题丨web Top10 漏洞简述(2)

文件包含漏洞 1、漏洞简述 程序在引用文件的时&#xff0c;引用的文件名&#xff0c;用户可控的情况&#xff0c;传入的文件名校验不严&#xff0c;从而操作了预想之外的文件&#xff0c;就有可能导致文件泄漏和恶意的代码注入。这是因为程序开发时候会把重复使用的函数写到归…

[笔记]pg常用命令

数据库版本 &#xff1a;9.6.6 注意 &#xff1a;PostgreSQL中的不同类型的权限有SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT,TEMPORARY,EXECUTE 和 USAGE。 1. 登录PG数据库 以管理员身份 postgres 登陆&#xff0c;然后通过 #psql -U postg…

新世界-旧世界

以下内容是这两天朋友问答形成的一些观点&#xff0c;堆成一篇文章。看似没有关联性&#xff0c;但你仔细品味&#xff0c;你会感觉到它们其实讲的是一个事。至于是一个啥事&#xff0c;我不说&#xff0c;你们自己猜。 &#xff08;1&#xff09; 今年年初看见篇文章&#xff…

mdBook介绍及使用——使用 Markdown 创建你自己的博客和电子书

目录 介绍一、下载与创建项目1.下载2.初始化3.结构说明 二、编写文章与启动1.编写文章2.构建3.启动 mdbook 服务 三、其他配置 介绍 mdBook 是一个使用 Markdown 创建书籍的命令行工具。它非常适合创建产品或 API 文档、教程、课程材料或任何需要清晰、易于导航和可定制的演示…

Spring中如何获取Bean方法上的自定义注解

文章目录 背景描述场景复现问题追踪解决方案扩展思考 背景描述 项目中需要扫描出来所有 标注了自定义注解A的Service里面标注了自定义注解B的方法 来做后续处理。 基本的思路就是通过Spring提供的ApplicationContext#getBeansWithAnnotation反射 来实现。 但是&#xff0c;随…

QT C++入门学习(2) QT Creator写一个简单的上位机控制LED

上位机和下位机的概念 上位机&#xff1a;指的是可以直接发送操作指令的计算机或者单片机&#xff0c;一般提供用户操作交互界面并向用户展示反馈数据。 典型设备&#xff1a;电脑、平板、手机、面板、触摸屏 下位机&#xff1a;指的是与机器相连接的计算机或者单片机&#…

SpringBoot+Vue 车辆充电桩系统

文章目录 1、效果演示效果图技术栈 2、 前言介绍&#xff08;完整源码请私聊&#xff09;3、主要技术3.4.1 数据库概念结构设计3.4.2 数据库具体设计 4 系统功能的具体实现4.1 前台功能模块4.1.1 首页功能4.1.2 用户后台管理 4.2 后台功能模块4.2.1 管理员功能4.2.2 维修员功能…

SciencePub学术 | 计算机类重点SCIEI征稿中

SciencePub学术 刊源推荐: 计算机类重点SCI&EI征稿中&#xff01;影响因子高&#xff0c;对国人非常友好。信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机类重点SCI&EI &#x1f4cc;【期刊简介】IF&#xff1a;7.5-8.0&#xff0c;JCR…

前端vue仿京东天猫简单好用的瀑布流瀑布流式布局列表组件waterfall

前端vue仿京东天猫简单好用的瀑布流瀑布流式布局列表组件waterfall&#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13046 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- proList: 条目数组数据 goProDetail:条目点击事…

微信小程序基础使用

微信小程序的基本使用 微信小程序文件类型 微信小程序主要提供了 4 种文件类型&#xff1a; 类型名称作用是否必须存在.wxml用于页面的布局结构&#xff0c;相当于网页中 .html 文件是.wxss用于页面的样式&#xff0c;相当于网页中的 .css 文件否.js用于页面的逻辑是.json用…

1.8C++流提取运算符重载

C流提取运算符重载 在 C中&#xff0c;流提取运算符&#xff08;>>&#xff09;是用于从流中提取数据的运算符。 C中的流提取运算符可以被重载&#xff0c;使得程序员可以自定义输入对象的方式&#xff0c;更方便地输入自定义的数据类型&#xff0c;也可以使得输入更加…

数字中国,开鸿见日

讲个小故事&#xff0c;《晋书乐广传》记载&#xff0c;西晋名士乐广&#xff0c;请大文学家潘岳替自己写一篇文章。潘岳让乐广把意思完完整整告诉他&#xff0c;再由他来动笔&#xff0c;最终写成了名扬当时的《呈太尉辞河南尹表》。时人看过这篇文章&#xff0c;评价乐广是“…

传输平台太多?难以管理?看这款跨网传输系统怎样解决

传输作为企业正常运行中最日常的行为&#xff0c;也意味着出现频率最高。微信、QQ、邮件、或是钉钉等办公软件&#xff0c;每天大家上班时开着各种软件&#xff0c;进行着不同的信息交互与传输。很多员工在工作时往往是哪个软件方便顺手就用哪个传输&#xff0c;但是这样也意味…

python打包后报错,无法启动,电脑缺少api-ms-win-core-path-11-1-0.dll

参考&#xff1a;《运行打包python程序时报&#xff1a;无法启动此程序&#xff0c;因为计算机中丢失 api-ms-win-core-path-l1-1-0.dll 尝试重新安装该程序以解决此问题。》 原因&#xff1a;python版本较高&#xff0c;打包时的python版本是python3.10&#xff0c;而运行打包…

xxl-job核心源码解析

xxl-job源码解析 如何自研一个xxljob 注册服务调度服务RPC组件(基建&#xff0c;底层严重依赖)日志服务告警服务 系统架构 执行流程 各大调度中心对比 1&#xff09;服务端启动流程 首先找到配置类 XxlJobAdminConfig 可以发现该类实现 InitializingBean接口&#xff0c;…