webpack自动化架构入门

实现前端项目自动化部署(webpack+nodejs) webpack + Nodejs实现前端自动部署;Jenkins 阅读详情

目录

  • 前言
  • webpack起步
  • 配置webpack
  • 构建本地服务器
  • 配置HTML模板
  • 配置es6
  • 配置react、jsx
  • 配置css、less

前言

第一次打算学习自动化的时候是参照的一个老哥的文章,没想到现在版本更新太快,那篇文章已经跑不起来了,所以我在这重新写一篇最新版的搭建文章,怀念一下我老哥。

原文地址

webpack起步

1、初始化项目

mkdir react-cli && cd react-cli
npm init -y

复制代码

第一句: 生成react-cli文件夹并进入

第二句: -y 的含义:yes的意思,在init的时候省去了敲回车的步骤,生成的默认的package.json

2、安装webpack

npm install webpack -D
复制代码

第一句: -D 是 --save-dev 的简写,是指安装模块并保存到 package.json 的 devDependencies中,主要在开发环境中的依赖包. 如果使用webpack 4+ 版本,还需要安装 webpack-cli。

npm install -D webpack-cli
复制代码

3、建立项目解构

react-cli
|--package.json
|--/dist
   |--index.html
|--/src
   |--index.js
复制代码

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div id="root"></div>
    <script src="main.js"></script>
</body>
</html>
复制代码

index.js

document.querySelector('#root').innerHTML = 'inke';
复制代码

我们就可以使用webpack的打包功能了

node_modules/.bin/webpack src/index.js --output dist/bundle.js --mode development
复制代码

执行出入口配置都在命令中。

执行成功之后会发现dist文件夹下会多出一个main.js,这时可以打开dist目录下的html文件,可以看到文本inke。

配置webpack

1、配置文件。

根目录下建立webpack.config.js

webpack.config.js

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'dist')
    }
};
复制代码

走config配置之后再进行打包命令,这时会缺少出入口的配置。如下

node_modules/.bin/webpack --mode production
复制代码

一样是dist文件夹中生成main.js,打开index.html看到文本inke

2、配置script脚本

package.json 添加一个 npm 脚本

"scripts": {
    "build": "webpack --mode production"
},
复制代码

运行,即可进行打包

npm run build
复制代码

构建本地服务器

webpack-dev-server 提供了一个简单的 web 服务器,并且能够实时重新加载。

1、安装 webpack-dev-server

npm install -D webpack-dev-server
复制代码

新增webpack配置。

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'dist')
    },
    // 新增
    devServer: {
        contentBase: "./dist", // 本地服务器所加载的页面所在的目录
        historyApiFallback: true, // 不跳转
        inline: true, // 实时刷新
        port: 3000, // 启用端口
        open: true, // 自动打开浏览器
    }
};
复制代码

与打包一样,配置NPM scripts脚本

"start": "webpack-dev-server --open --mode development"
复制代码

执行

npm run start
复制代码

即可看到本地启动了3000端口,访问

http://localhost:3000/
复制代码

我们又再次看到了inke文本。

启动webpack-dev-server后,在目标文件夹中是看不到编译后的文件的,实时编译后的文件都保存到了内存当中。因此使用webpack-dev-server进行开发的时候都看不到编译后的文件

2、启用热更新

先来科普一下定义,关于 WDS 热更新,有以下几点:

(1)WDS 不刷新整个页面;
(2)WDS 不输出文件,而放在内存中(没有磁盘IO,速度更快);
(3)使用 HotModuleReplacementPlugin 插件(webpack自带);
复制代码

配置一个webpack自带的插件并且还要在主要js文件里检查是否有module.hot

webpack.config.js

const path = require('path');
// 新增
const webpack = require('webpack');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'dist')
    },
    devServer: {
        contentBase: "./dist", // 本地服务器所加载的页面所在的目录
        historyApiFallback: true, // 不跳转
        inline: true, // 实时刷新
        port: 3000,
        open: true, // 自动打开浏览器
        hot: true // 开启热更新-新增
    },
    // 新增
    plugins:[
        //热更新
        new webpack.HotModuleReplacementPlugin()
    ],
};

复制代码

src/index.js

document.querySelector('#root').innerHTML = 'inke';

if (module.hot){
    //实现热更新
    module.hot.accept();
}
复制代码

热更新允许在运行时更新各种模块,而无需进行完全刷新

重启一下项目,看一下效果。动态修改inke文本,即可进行热更新。

配置HTML模版

科普,为什么要用HTML模板

The HtmlWebpackPlugin simplifies creation of HTML files to serve your webpack bundles. This is especially useful for webpack bundles that include a hash in the filename which changes every compilation. You can either let the plugin generate an HTML file for you, supply your own template using lodash templates, or use your own loader.

1、安装html-webpack-plugin

npm install -D html-webpack-plugin
复制代码

添加webpack配置

webpack.config.js

...
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry: './src/index.js',
    output: {
        // 添加hash可以防止文件缓存,每次都会生成4位hash串
        filename: 'main.[hash:4].js',
        path: path.resolve(__dirname, 'dist')
    },
    devServer: {
        ...
    },
    plugins:[
        new webpack.HotModuleReplacementPlugin(),
        // 新增
        new HtmlWebpackPlugin({
            template: './src/index.html',
            hash: true, // 会在打包好的bundle.js后面加上hash串
        })
    ],
};

复制代码

我们把dist文件夹中的index.html移动到src中,当成模板使用。

清空dist,我们重新打包试试看

 

 

 

这里对index.html是模板生成的,刚才配置的hash已经配置上去了。

如果你进行改动,每次的hash值是不一样的,这样会有一个问题。dist文件中 main.js文件会越来越多。所以我们需要一个打包之前清空dist文件夹的一个Plugins.

2、安装 clean-webpack-plugin

npm install -D clean-webpack-plugin
复制代码

配置webpack

webpack.config.js

...
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
    entry: './src/index.js',
    output: {
        // 添加hash可以防止文件缓存,每次都会生成4位hash串
        filename: 'main.[hash:4].js',
        path: path.resolve(__dirname, 'dist')
    },
    devServer: {
        ...
    },
    plugins:[
        ...
        new CleanWebpackPlugin()
    ],
};

复制代码

这样的话每次打包就不会多出文件了。

编译es6

这里我们采用babel8的配置。

大概的配置是这个样子

webpack 3.x | babel-loader 8.x | babel 7.x
复制代码

我们来具体安装

npm install -D babel-loader@8.0.0-beta.0 @babel/core @babel/preset-env
复制代码

webpack.config.js

...

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'main.[hash:4].js',
        path: path.resolve(__dirname, 'dist')
    },
    // 新增babel-loader解析。
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            }
        ]
    },
    ...
};

复制代码

重启一下项目,我们在src/index中试着写一些es6语法。你会发现,会正常进行编译。

配置react、jsx

安装react 及 react-dom

npm install -D react react-dom
复制代码

安装相应babel

npm install -D @babel/preset-react
复制代码

根目录下创建.babelrc配置文件

.babelrc

{
    "presets": ["@babel/preset-react"]
}
复制代码

这样我们就可以引用react并且正常编译了。

修改一下我们的业务代码

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
    <App />,
    document.querySelector('#root')
);

if (module.hot){
    //实现热更新
    module.hot.accept();
}
复制代码

src/App.js

import React from 'react';

class App extends React.Component{
    render() {
        return (
            <div>inke</div>
        );
    }
}
export default App;

复制代码

重启一下项目,我们会发现,项目正常运行,解析成功。

配置css、less

这里想一个问题,如果react直接

import './App.css';

class App extends React.Component{
    render() {
        return (
            <div className="root">inke</div>
        );
    }
}
export default App;

复制代码

这样会有什么问题?

因为jsx的语法去掉后react组件是这个样子的。

 

 

 

className是js语法,如果我们直接引入css是无法直接进行装饰的。

1、安装css 相应loader

npm install -D css-loader style-loader url-loader
复制代码

分别为,css解析,style-loader 的作用是把转码后的css文件插入到相应的 文件中去,样式内url地址解析。

修改webpack配置

module: {
    rules: [
        ...,
        {
            test:/\.(png|jpg|gif)$/,
            use:[
                "url-loader"
            ]
        },
        {
            test: /\.css$/,
            exclude: /node_modules/,
            use: [
                "style-loader",
                "css-loader"
            ]
        }
    ]
},
复制代码

这里注意一点

loader的加载顺序是从右往左。这里的编译顺序是先用css-loader将css代码编译,再交给style-loader插入到网页里面去。所以css-loader在右,style-loader在左。

然后我们启动项目,再引入一下css文件,就可以使用样式了。

接下来解析less

2、安装less-loader

npm install -D less-loader
复制代码

修改webpack配置

module: {
    rules: [
        ...,
        {
            test:/\.less$/,
            use:[
                "css-loader",
                "style-loader",
                "less-loader",
            ]
        }
    ]
},
复制代码

END

这样我们就有了一套最基本的react自动化框架。

修改框架就如改装车,接下来我们还需要去进行改装。

一辆车光能跑是不够的,还需要跑的又快又好。

前端自动化构建入门6-使用webpack改造我们的react应用 认识webpackwebpack是一个简单方便的模块打包工具,你可以利用webpack对你代码进行分块打包、代码转译。webpack是目前最流行的模块打包工具之一。 更详细的介绍可以参照这里。注意:以下实例均为目前webpack的最新版本webpack 3.0。不同的版本,配置也会有些许不同,可以关注webpack官方网站的详细说明。安装webpack//安装到项目目录 并保存配置到package 阅读详情

相关推荐

webpack入门跟学笔记

学习了两个星期,断断续续终于还是把webpack4学完了,我学习的时候webpack5是已经出来了的,但是大同小异先学webpack4再过渡到webpack5可以了解他们之间的差异,本次学习无项目实战,主要为webpack的配置详解,过程中因为版本问题也遇到了一些错误,在此记录我的学习笔记,这是跟做的版本,即有详细的步骤,后续还会想整理再发布一个知识点版的,大家一起进步!笔记如有错误,欢迎评论指正。 文章目录一、webpack概述1、什么是webpack2、需要提前掌握的内容3、最终掌握的webpack哪些

lscheng的博客 1752

第六章 webpack5开发服务器与自动化

每次写完代码都需要手动输入指令才能编译代码,太麻烦了,我们希望一切自动化 开启服务器配置 文件名: 运行服务器 并且当你使用开发服务器时,所有代码都会在内存中编译打包,并不会输出到 dist 目录下。开发时我们只关心代码能运行,有效果即可,至于代码被编译成什么样子,我们并不需要知道。如果你想你的js打包输出在一个指定的目录可以在output对象里面进行配置:文件名: 如果你想你的图片资源也输出在一个指定目录可以这样配置:文件名: 运行webpack 你可以看到对应文件的输出目录。 打印而不是删除

天界程序员的博客 514

前端领域Webpack配置文件的自动化生成

Webpack作为现代前端开发的核心构建工具,其配置复杂度随着项目规模增长而急剧上升。本文旨在探讨如何通过自动化手段解决Webpack配置难题,涵盖从基础原理到高级优化的完整知识体系。文章首先介绍Webpack配置的基本概念,然后深入分析自动化生成的原理和技术方案,接着通过实际案例展示实现细节,最后讨论相关工具和未来趋势。Entry:Webpack构建的入口起点Loader:文件转换器,将非JS模块转为Webpack可处理格式Plugin:扩展Webpack功能的JavaScript模块Bundle。

AI架构全栈开发实战笔记 914

Webpack开发服务器&自动化

每次写完代码都需要手动输入指令才能编译代码,我们希望一切自动化。

qq_35580927的博客 141

一个基于vue2实现功能强大的自动化后台框架基础模板

这是一个功能强大的自动化后台框架基础模板,基于vue2实现,用到的技术包含:vue2,vue-router,vuex2,axios,ElementUI。

学习Python,小白如何搭建Python环境?

学习Python,首先需要搭建好Python环境,主要分为【运行环境搭建】、【开发环境搭建】以及【Python环境配置】三个环节,接下来我将对Python环境搭建这三个部分进行介绍。

weixin_72923265的博客 9015

webpack入门(十)-- 搭建开发服务器并实现自动化热更新

因为,每次修改我们的文件,都需要重新编译后,才能查看效果。也就意味着每次代码变更,都要运行编译指令,效率低。所以,我们需要一个开发中自动监听文件变更并且自动编译的工具。这里介绍的是webpack-dev-server。

weixin_43516605的博客 268

机器视觉最全面试题总结

空洞卷积(Atrous Convolution)也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样a. 是普通的卷积过程(dilation rate = 1),卷积后的感受野为3b. 是dilation rate = 2的空洞卷积,卷积后的感受野为5。

@bangbang的博客 9214

Webpack构建工具介绍

1.Webpack Webpack 是一个现代 JavaScript 应用程序静态模块打包工具(module bundler),在 Webpack 里一切文件皆模块(例如:JavaScript、CSS、SCSS、图片、模板,在 Webpack 眼中都是一个个模块),通过 Loader 转换文件,通过 Plugin 注入钩子,最后输出由多个模块组合成的文件(Chunk)。Webpack 专注于构建模...

liujun2son 624

BQ25798双电源输入4节电池升降压充电与最大功率跟踪于光伏板应用

介绍一颗具有窄范围直流电压NVDC、路径管理PPMT、光伏板最大功率跟踪及反向放电OTG升降压充电控制器,带I2C接口能对内部寄存器做控制

linkedin_38804946的博客 1682

东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比

本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。

weixin_30800807的博客 398

webpack 中文文档

webpack 最强最详细中文文档 https://doc.webpack-china.org/guides/getting-started/#- webpack多页应用架构系列 http://webpackdoc.com/module-system.html 入门Webpack https://www.talkingcoder.com/article/63721398125429484...

weixin_30367543的博客 110

大白话讲解Numpy中什么是一维、二维、三维数组,以及5种创建方式

NumPy中提供了多种创建数组的方式,其中最基本的方式就是通过array()函数创建数组在使用该函数时直接传入列表或元组即可。 通过array()函数分别创建一维数组、二维组和三维数组,那么什么是维度呢?一维、二维、三维有什么区别? 1、什么是维度? 维度可以理解为描述数据的一种 “方向” 或者 “层次”。在数组中,维度的数量决定了我们需要用多少个索引来访问一个元素 2、一维、二维、三维的区别? (1)一维:一维数组就像是一条直线上排列的一组数据,例如: a = np.array([1, 2

1365

webpack开发服务器&自动化12--webpack入门学习

每次写完代码都需要手动输入指令才能编译代码,太麻烦了,我们希望一切自动化。

g841805的博客 830

高能物理相关软件

国内高能物理实验背景     研究物质最深层次结构及相互作用的前沿基础科学。 现代高能物理实验的要素    实例源 、 探测器、   电子学、  触发 DAQ、  原始数据、 刻度、重建 、物理分析、  成果  。 离线软件的地位和作用。    是硬件设备和物理学家的桥梁,是从数据到物理成果转化中的关键和重要的环节。 高能物理实验及其特点 独一无二性,实验规模越来越大,努力省钱(使用

Alan Zhuang的博客 3301

Trae的付费之路还挺艰难,茫茫多的人想付付不了(附解决办法)

不得不说,Trae国际版这个付费其实整的挺复杂的,但没办法,毕竟有政策限制,付费成功后,你就是尊贵的Pro用户啦,使用Claude 4不排队还是挺爽的,而且600次其实不算少了,有一个小技巧,简单的问题就把模型切到Gemini-2.5-flag,因为使用这个模型是没有次数限制的。其次付费的时候有个ZIP Code,这东西也是个迷之存在,有的地区节点需要填,有的不需要,如果你选到了不需要填的节点,那很好,付费就行了,如果需要填,可以填一个51800试试。

cpp加油站的专栏 5883

Webpack4.x 版本入门指南

本文是基于一位以前公司的同事zzj所写的 Webpack入门指南 这篇文章做构建。本文是基于win环境搭建的webpack,以前的同事写的入门指南是webpack3.0版本,最近想用webpack却发现它已经更新到了4.1.x,于是遇到了几个坑,也为了给想入门webpack的小伙伴提供个方便,重新写一份入门指南。什么是webpack?Webpack 是当下最热门的前端资源模块化管理和打包工具。它可...

yk75952的博客 4526

2024年03月CCF-GESP编程能力等级认证Python编程一级真题解析

小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( ) A. 小程序 B. 计时器 C. 操作系统 D. 神话人物

人生就是一个不断学习的过程 1029

【webpack浅析】webpack之深入浅出

本文主要讲解两个方面。分别是 深入了解webpack 和 从0开始配置vue项目。 一:深入了解webpack 1、webpack干什么的 总的来说,webpack是一个资源综合处理中心。这名字起的是不是前无古人,是不是高端大气?!这里我要利用高深的比喻修辞手法和配图(见配图 1.1)大概齐的解释一下webpack。webpack其实可以看做是一个半自动(之所以是半自动,是需要我们自己进行很多的配置)工厂流水线。所有的前端资源,比如 图片,样式,js文件等等,一个接一个排好队伍,整齐划一的进入流...

jmszl1991的博客 4487

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

webpack概念引入以及入门案例

webpack概念引入 初学webpack,我们应该会有一个疑惑,就是自动化构建工具是基于什么情况产生的,能帮我们在开发工程中带来怎样的便利。下面我们就来解答下这种疑惑。 首先,我们来想想网页中会引用哪些常见的静态资源?无非就是以下几类。 js css image 字体文件 模板文件 但是随着项目的庞大,引入的这些资源也会增多,这些静态资源的增多,就会产生以下几个问题了。 网页加载速度慢,因...

rosecurry的博客 410

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

超详细 WebPack 入门教程

前端工程化 1.什么是前端工程化 前端工程化指的是: 在企业级的前端项目开发中,把前端开发所需要的工具,技术,流程,经验等进行规范化,标准化。 1)模块化 (js的模块化,css的模块化,资源的模块化) 2)组件化(复用现有的UI结构,样式,行为) 3)规范化(目录结构的划分,编码规范化,接口规范化,文档规范化,Git分支管理) 4)自动化(自动化构建,自动化部署,自动化测试) 4)前端工程化的解决方案 早期的前端工程化解决方案:grunt ,gulp 目前主流的前端工程化解决方案: webpack(ht

qq_43682422的博客 6756

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

webpack入门全套

webpack入门到精通(处理各种资源文件、编写插件)

weixin_43516605的博客 682

webpack入门

在使用webpack之前,我曾经使用过gulp(也稍微写过一下博文),虽然来说都是打包工具,但是当公司一下把一个webpack模板扔过来的时候,我一下子就懵了,不知所措,只能慢慢的来重新学习webpack。 在以前使用gulp的时候,一般有一个套路如下, gulp.task('name...', function() {   gulp.src('路径/***通配符.后缀'...

anshaobiao6449的博客 87

某云盘encryptMsg 加密之自动化扣webpack

本文主要介绍了webpack半自动化扣代码的流程。不需要ast基础。也不涉及加密的过程。网站硬扣的话很麻烦。特地挑一个模块多的网站去搞。着重介绍于webpack工具的使用与实现方式。这里的话。本人也开源到了github上了。本人代码写的烂。大佬勿喷,

有什么问题回复不及时,可以私聊我。也可以加我的星球:知识爬行者 1467

webpack 基础入门 - 了解webpack

webpack 基础入门 - 了解webpack webpack 在学习webpack之前先来了解一下什么是webpack,为什么要使用webpack,和其他的同类型软件有什么区别。 什么是webpack? webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependen...

weixin_34185320的博客 191
上一篇: 京东T8大佬限时分享数据结构与算法手册,简直刷新了我的认知
下一篇: 涨知识:阿里资深技术官首次分享分布式核心原理解析/消息中间件实践笔记
java架构师小芷
博客等级 码龄6年 216粉丝 519原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值