从0-1建一个webpack/vue项目,熟悉一下webpack知识点

news2024/11/27 20:59:06

以下配置项部分优化来自于国内直连GPT/Claude

第一步

首先整个新文件夹,打开终端,然后创建一个新目录,或者直接在vscode里面建个新文件夹,并进入该目录;

mkdir my-vue-webpack-project

第二步 进入当前目录

cd my-vue-webpack-project

第三步 初始化npm项目

npm init -y

第五步 安装webpack

npm i -D webpack webpack-cli webpack-dev-server

安装完成之后我们需要配置webpack,在外层建一个build的文件夹,然后在build文件夹中建一个webpack.config.js

const path = require('path');
module.exports = {
    mode: 'development', // 开发模式
    entry: path.resolve(__dirname, '../src/main.js'), // 入口文件
    output: {
        filename: '[name].[hash:8].js', // [name] 指entry属性名字, 默认为main
        path: path.resolve(__dirname, '../dist'), // 打包后的目录,这里会自动创建dist文件夹
        clean: true, // 打包前清空输出目录,相当于clean-webpack-plugin插件的作用,webpack5新增。
    }
}

当前目录如下
在这里插入图片描述

第六步 安装html-webpack-plugin插件

对项目打包压缩之后,会有一个压缩的js文件,我们需要把这个js文件引入到我们的根入口文件index.html中,
html-webpack-plugin这个插件可以自动化完成这个操作

npm i -D html-webpack-plugin

基于以上6步,来个基本的打包示例
1.我们在外层再新建一个pubilc文件夹,在public文件夹里面建一个index.html,之后在webpack.config.js里面引入第六步安装的插件,并写在plugins数组里面,写完之后的webpack.config.js代码如下:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    mode: 'development', //开发环境
    entry: path.resolve(__dirname,'../src/main.js'),//入口文件
    output: {//输出文件
        path: path.resolve(__dirname,'../dist'),
        filename: '[name].[hash:8].js',//输出文件名
        clean: true, //每次打包前清空dist文件夹
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: path.resolve(__dirname,'../public/index.html'),//模板文件
        })
    ],
}

2.需要在package.json里面加上build打包指令,注意在script对象里面加以下指令

"build": "webpack --config build/webpack.config.js"

3.完成上述内容,就可以在命令行执行npm run build来打包啦
打包成功后如下
在这里插入图片描述
完成以上示例进入拓展内容

第七步 安装css相关loader插件解析我们项目中的css

涉及到css我们需要安装一些常用的css处理插件,比如css,less等相关loader

npm i -D style-loader css-loader less less-loader

之后在webpack.config.js中配置rules

// webpack.config.js

module.exports = {
    //...省略其他配置
    module: {
        rules: [
            {
                // 用正则去匹配要用该 loader 转换的 CSS 文件
                test: /\.css$/,
                exclude: path.resolve(__dirname, 'node_modules'),
                use: ['style-loader', 'css-loader'] // 切记从右向左解析原则
            },
            {
                test: /.less$/,
                exclude: path.resolve(__dirname, 'node_modules'),
                use: ['style-loader', 'css-loader', 'less-loader'] // 从右向左解析原则   
            }
        ]
    }
}


第八步 安装autoprefixer ,为css添加浏览器前缀

因为有些CSS属性只支持某个浏览器,或者因为某个属性前端还没形成统一的标准,所以需要在某些css属性上加上各个浏览器的前缀,比如-webkit/-moz等等

.box {
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  -o-border-radius: 10px;
  border-radius: 10px;
}

先安装依赖:

npm i -D postcss-loader autoprefixer 

之后在webpack.config.js里面配置postcss-loader以及autoprefixer 插件即可

 module: {
        rules: [
            {
                test: /.less$/,
                exclude: path.resolve(__dirname, 'node_modules'),
                use: ['style-loader', 'css-loader',
                    {
                        loader: 'postcss-loader',
                        options: {
                            postcssOptions: {
                                plugins: [
                                    require('autoprefixer')
                                ]
                            }
                        }
                    },
                'less-loader'] // 从右向左解析原则   
            }
        ]
    }

第九步 把css样式从js单独抽离出一个文件

安装插件

npm i -D mini-css-extract-plugin

添加插件相关配置【以下包括前面几个步骤的配置,这一步主要看MiniCssExtractPlugin

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {
    mode: 'development', //开发环境
    entry: path.resolve(__dirname,'../src/main.js'),//入口文件
    output: {//输出文件
        path: path.resolve(__dirname,'../dist'),
        filename: '[name].[hash:8].js',//输出文件名
        clean: true, //每次打包前清空dist文件夹
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: path.resolve(__dirname,'../public/index.html'),//模板文件
        }),
        new MiniCssExtractPlugin({
            filename: "[name].[hash:8].css",
            chunkFilename: "[id].css",
        })
    ],
     module: {
        rules: [
            {
                // 用正则去匹配要用该 loader 转换的 CSS 文件
                test: /\.css$/,
                exclude: path.resolve(__dirname, 'node_modules'),
                use: [MiniCssExtractPlugin.loader,'css-loader'] // 切记从右向左解析原则
            },
            {
                test: /.less$/,
                exclude: path.resolve(__dirname, 'node_modules'),
                use: [MiniCssExtractPlugin.loader,'css-loader',
                    {
                        loader: 'postcss-loader',
                        options: {
                            postcssOptions: {
                                plugins: [
                                    require('autoprefixer')
                                ]
                            }
                        }
                    },
                    ,'less-loader'] // 从右向左解析原则   
            }
        ]
    }
}

测试打包效果,在src下面新建一个index1.css文件和index2.less文件,并在main.js引入。

之后运行下```npm run build``,可以看到dist下的js和css。发现main.css整合了src下面两个css
在这里插入图片描述

第十步 babel转义js文件【比较重要】

首先安装一系列Babel库,babel-loader负责将ES6/7/8等语法转换为ES5语法 core-js负责将新的api进行转化,例如promise、Generator、Set、Maps、Proxy等

npm i -D babel-loader @babel/preset-env @babel/core @babel/plugin-proposal-decorators
npm i -D @babel/plugin-transform-arrow-functions @babel/plugin-transform-runtime
npm install @babel/plugin-proposal-class-properties --save-dev

上面基本是常用的一些webpack配置项;

我们还可以做一些其他配置,比如热更新

安装插件

npm i -D webpack-dev-server

然后把下面这个命令行放在package.json里面的script对象里面

"dev": "webpack serve --config build/webpack.config.js"
{
  "scripts": {
    "dev": "webpack serve --config build/webpack.config.js",
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config build/webpack.config.js"
  },
}

然后就可以npm run dev运行啦

正常项目我们还要区分下dev环境和生产环境

新建两个文件夹

webpack.dev.js 开发环境使用
webpack.prod.js 生产环境使用
webpack.config.js 公用配置

安装webpack-merge插件库,来合并配置项

npm i -D webpack-merge
// webpack.dev.js
const { merge } = require('webpack-merge');
const common = require('./webpack.config.js')

module.exports = merge(common, {
  mode: 'development',
  devServer:{
    port:3000
  }
});

// webpack.prod.js
const { merge } = require('webpack-merge');
const common = require('./webpack.config.js');

module.exports = merge(common, {
  mode: 'production',
});

原先的webpack.config.js也需要做出修改,我们只需要删除mode和devserver字段
packpage.json修改

  "scripts": {
    "build": "webpack --config build/webpack.prod.js",
    "dev": "webpack serve --config build/webpack.dev.js"
  },

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

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

相关文章

SpringBoot项目多线程实现定时任务-只需要三步

众所周知,项目中需要使用定时任务发布的需求时非常常见的,例如:数据同步,清理垃圾文件,清理过期用户等需求,可能需要我们定时去清理数据。 但是我们如果集成xxl-job,Quartz,spring …

IPC 进程间通信方式

IPC对象(共享内存) 共享内存: 1.是一块,内核预留的空间 2.最高效的通信方式 //避免了用户空间 到 内核空间的数据拷贝 用中间那个get函数,就可以使key与共享内存一一对应 怎么将共享内存与进程关联起来 //step1 产生key值 ftok: 功能&am…

鸿蒙内核源码分析——(自旋锁篇)

本篇说清楚自旋锁 读本篇之前建议先读系列篇 进程/线程篇. 内核中哪些地方会用到自旋锁?看图: 概述 自旋锁顾名思义,是一把自动旋转的锁,这很像厕所里的锁,进入前标记是绿色可用的,进入格子间后,手一带&#xff0c…

「黑神话:悟空」员工疯狂被挖!打工天命人急改备注……

一部国产3A大作「黑神话:悟空」横空出世,震动了全球,冲上多国销量榜首。 尤其对于中国玩家以及中国游戏市场来说,这款产品实在让大家等了太久,最让人意外的是,昔日那些喊着电子鸦片的大媒体,也话风一转&…

高级列表组件ReList

高级列表组件ReList 组件实现基于 Vue3 Element Plus Typescript,同时引用 vueUse lodash-es tailwindCss (不影响功能,可忽略) 主要基于JSX风格实现高度动态的列表渲染组件,可以通过信息配置Metas配置控制信息项展示,同时支持…

数学基础(二)

一、导数 导数计算: 偏导数: 方向导数: 梯度: 函数在某点的梯度是一个向量,它的方向余方向导数最大值取得的方向一致。其大小正好是最大的方向导数 二、微积分 面积由来: 切线: 定积分&#x…

[Linux]如何在虚拟机安装Ubuntu?(小白向)

一、我们为什么要在虚拟机中安装Ubuntu? 在虚拟机中安装系统主要是为了让一个系统与我们原本的系统隔离,不管是想运行一些不安全的软件,或者是想运行一些独特的操作系统,我们都可以选择使用虚拟机来安装和隔离这些操作系统。如果你是一位Lin…

PMP–知识卡片--工作分解结构WBS元素

WBS包含如下几种元素: (1)子项目:子项目是整个项目的一部分,它可以被相对独立地作为“项目”进行管理,可以由一个专业团队或一个分包组织负责; (2)控制账户:控…

爆款来袭!AI萌娃T台秀,单条视频千万级播放量,制作方法竟如此简单!

大家好,我是小奇,一名热衷于分享AI副业项目的普通博主。不管你是AI小白还是老手,我都能帮你轻松上手,用AI技术赚钱。想多赚点?跟我来,一起探索AI副业,实现财务自由!记得关注我哦&…

Java、python、php版的高校失物招领平台(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

数据结构(11)——二叉搜索树

欢迎来到博主的专栏:数据结构 博主ID:代码小豪 文章目录 二叉搜索树二叉搜索树的声明与定义二叉搜索树的查找二叉搜索树的插入二叉搜索树的中序遍历二叉搜索树的删除 key_value型搜索二叉树 二叉搜索树 二叉搜索树也称二叉排序树,是具备以下特征的二叉树…

sourceinsigt + samba

samba服务器 yum install -y sambsystemctl start smb systemctl enable smb 注意 setenforce 0 是一个用于管理 SELinux(Security-Enhanced Linux)模式的命令。SELinux 是 Linux 内核的一种安全模块,提供了强制访问控制(MAC&am…

【密码学】密钥管理:②密钥分配

一、密钥分配的定义 密钥分配是密钥管理生命周期中最重要的部分,密钥分配方案研究的是密码系统中密钥的分发和传送问题。从本质上讲,密钥分配为通信双方建立用于信息加密、解密签名等操作的密钥,以实现保密通信或认证签名等。 (1…

埃氏筛选法求素数

埃氏筛选法求素数可以减少遍历次数,及在前期的循环中就将存在的合数打上标记,从而提高算法的时间效率。 一、算法实现 void prime_number(int n) {int flag[n];int count 0;int* primeArr;/// 默认标记所有的数都是素数memset(flag,0,sizeof(flag…

浅析打电话检测算法接打电话识别算法展示及其全套打电话检测算法源码

打手机检测算法,特别是智能边缘分析一体机中的打手机检测算法,是一种专门用于监控和分析在边缘计算设备上的手机使用行为的算法。这种算法主要利用了机器学习和计算机视觉的先进技术,通过对设备上的视频流或图像进行深入分析,以识…

“万物共生”户外沉浸式展馆光影互动设计,思特科技打造!

01      思特科技助力北京玉渊潭公园 “万物共生” 户外沉浸式展馆光影互动设计,将公园独具特色的人文景观和自然景观相结合,利用数字光影艺术,通过不同形式、不同状态来表现生命的多元化,带来震撼的沉浸式体验。    北京…

加密与安全_解密AES加密中的IV和Seed

文章目录 概述IV(Initialization Vector,初始化向量)Seed(种子) CodeseedIV 小结 概述 在AES加密中,**IV(Initialization Vector,初始化向量)和Seed(种子&am…

HoloLens 坐标系统 Coordinate systems

Hololens 和 Unity 空间坐标系统-CSDN博客文章浏览阅读79次。这意味着,在 X、Y 或 Z 轴上相距 2 个单位的物体,在混合现实中的渲染效果是相距 2 米。虽然左手坐标和右手坐标是最常见的系统,但 3D 软件中也会使用其他坐标系。例如,…

【杂乱算法】前缀和与差分

前缀和 文章目录 前缀和一维应用 二维差分一维 二维扩展1、前缀和与哈希表 一维 一个数组prefix中,第i个元素表示nums[0]至nums[i-1]的总和,那么我们就称这个prefix数组是nums数组的前缀和。 prefix [ i ] ∑ j 0 i nums [ j ] \text{prefix}[i] \s…

显示弹出式窗口的方法

文章目录 1. 概念介绍2. 使用方法3. 示例代码 我们在上一章回中介绍了Sliver综合示例相关的内容,本章回中将介绍PopupMenuButton组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧&#xf…