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

news2024/12/22 23:56:09

先简单介绍一下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发布

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分享】1929-2022年全球站点的逐月平均能见度(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到常用的能见度数据,最详细的能见度数据是具体到气象监测站点的能见度数据! 有关气象指标的监测站点数据,之前我们分享过1929…

Jmeter分布式压力测试

目录 1、场景 2、原理 3、注意事项 4、slave配置 5、master配置 6、脚本执行 注意: 1、场景 在做性能测试时,单台机器进行压测可能达不到预期结果。主要原因是单台机器压到一定程度会出现瓶颈。也有可能单机网卡跟不上造成结果偏差较大。 例如4C…

Pytest教程__跳过用例的执行(7)

pytest跳过用例执行的用法与unittest跳过用例大致相同。 pytest跳过用例的方法如下: pytest.mark.skip(reason):无条件用例。reason是跳过原因,下同。pytest.mark.skipIf(condition, reason):condition为True时跳过用例。 pyte…

一文了解清楚前景无限的高性能计算工程师工作内容,原来和码农区别这么大 ...

随着我国对科研基建的重视以及超算互联网的部署工作正式开展,越来越多的人关注到了一块蓝海的就业宝藏——高性能计算工程师。当今一位高性能计算工程师人才可谓抢手至极,尽管年薪高涨,但是依然供不应求。这是未来30年都比较需要的工程技术人…

java基础(多线程)-wait/notify

一、wait/notify的原理 Owner线程发现条件不满足,调用wait方法,即可进入WaitSet变为WAITING状态 BLOCKED和WAITING的线程都处于阻塞状态,不占用CPU时间片BLOCKED线程会在Owner线程释放锁时唤醒WAITING线程会在Owner线程调用notify或notifyAll…

大话设计模式之——单例模式

单例(Singleton) Intent 确保一个类只有一个实例,并提供该实例的全局访问点。 Class Diagram 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能…

Selenium+Unittest自动化测试框架实战详解

目录 前言 项目框架 首先管理时间 !/usr/bin/env python3 -- coding:utf-8 -- 配置文件 conf.py config.ini 读取配置文件 记录操作日志 简单理解POM模型 管理页面元素 封装Selenium基类 创建页面对象 熟悉unittest测试框架 编写测试用例 执行用例 生成测试报…

存储圈秘史,细说“配额管理”的那些事儿

江湖乱战 分布式存储圈管理者“配额管理”出手划天下 各方数据混战之际 管理员划分空间应接不暇 不可避免的产生资源划分不合理等问题 各路“配额管理”豪杰陆续上线,力求结束纷争一统江湖 职场人所熟知的办公软件“共享盘”冲锋在前 共享盘可支持多人实时上…

在Blender中制作一艘海船

今天瑞云小编给大家带了由作者Menno Snoek的Blender教程,一名自学成才的 3D 艺术家,现在已经使用 Blender 大约 2 年了,接下来跟着云渲染小编看下Express Shipping(海船)背后的工作流程。 介绍 嘿!我叫 M…

高分子PEG:Maleimide-PEG5K-NOTA,NOTA-聚乙二醇马来酰亚胺,规格特点介绍

NOTA-PEG5000-Mal,Maleimide-PEG5K-NOTA,NOTA-聚乙二醇马来酰亚胺,MV5000产品结构式: 产品规格: 1.CAS号:N/A 2.包装规格:1g、5g、10g,包装灵活,有100mg包装也有500mg 1…

技术新动向 | 谷歌云大举扩展安全 AI 生态系统

【本文由 Cloud Ace 整理发布, Cloud Ace 是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件…

Linux:IP地址和主机名

1、IP地址:每个联网的电脑都会有一个地址,用于和其他计算机进行通讯 IP地址目前有两个版本,IPv4和IPv6,目前最常用的是IPv4版本;IPv4版本的地址格式为a:b:c:d,a、b、c、d代表了0-255的数字 Linux中&#xf…

基于SSM的电影院购票系统开源啦

大家好,今天给大家带来一款SSM的电影院售票系统,非常不错的一个项目,学习javaweb编程必备。 下载地址在文末 1.SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow 里面。Spring 框架提供了构建 Web …

ESP32构建简单WebServer服务器

目录 WebServer 服务器ESP32 filesystem uploaderWebServer 库WIFI 链接网页与代码烧录 WebServer 服务器 此案例中,我们将创建一个最简单的 webserver 服务器 案例实现:ESP32 通过 SPIFFS 上传网页文件并保存,之后手机开启热点,E…

华为OD机试真题 JavaScript 实现【检查是否存在满足条件的数字组合】【2022Q4 100分】

一、题目描述 给定一个正整数数组,检查数组中是否存在满足规则的数字组合 规则:A B 2C 二、输入描述 第一行输出数组的元素个数。 接下来一行输出所有数组元素,用空格隔开。 三、输出描述 如果存在满足要求的数,在同一行…

Vue:全选多个选择框

可以使用 v-model 来绑定一个布尔类型的变量来实现全选多个选择框的功能。具体步骤如下: 在data中定义一个数组,用来存储所有需要选择的项的状态。 在模板中使用 v-for 指令循环渲染每个选择框,并将每个选择框的状态绑定到数组中对应的项上。…

从VALSE 2023看近期人工智能的研究热点

VALSE发起于2011年,是Vision And Learning SEminar的简写,取法语“华尔兹舞”之意,中文名称为视觉与学习青年学者研讨会。VALSE为计算机视觉、图像处理、模式识别与机器学习研究领域的华人青年学者提供了一个自由、平等、低成本的深度学术交流…

Postgresql源码(106)Generic Plan与Custom Plan的区别(以分区表为例)

相关: 《Postgresql源码(105)分区表剪枝代码分析》 《Postgresql源码(106)Generic Plan与Custom Plan的区别(以分区表为例)》 实例 CREATE TABLE measurement (city_id int not null,l…

MariaDB数据库的主从配置

1、前置工作 首先准备两台可以互相ping通的机器,两台机器可以互为主从,示例:10.210.23.77主服务器 10.20.84.183从服务器 2、安装 在两台机器上各自安装数据 解压MariaDB安装包; tar zxvf MariaDB.tgz cd mariadb 安装Mari…

上海市计算机学会竞赛平台比赛组卷

思路&#xff1a;桶排序开出长度为1e55的桶&#xff0c;然后从后向前遍历&#xff0c;对与桶是2的值输出桶的序号即可~~&#xff08;我用的哈希排序&#xff09;~~ 代码&#xff1a; #include <bits/stdc.h>using namespace std; const int N 1e5 5; map<int ,int…