【Vue.js 入门笔记】Webpack 入门

Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

从图中我们可以看出,Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求。

接下来我们简单为大家介绍 Webpack 的安装与使用。

安装 Webpack

在安装 Webpack 前,你本地环境需要支持 node.js。

复制代码
npm install webpack -g

创建项目

·接下来我们创建一个目录 contents:

复制代码
mkdir contents

在 app 目录下添加 index.js \ index.html 文件

接下来我们使用 webpack 命令来打包:

复制代码
webpack index.js bundle.js

成功后的图片

打开index.html后。出现结果如下图所示

创建第二个样式文件

(略)。

代码尝试走了但是没走通

配置loader

Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换。

所以如果我们需要在应用中添加 css 文件,就需要使用到 css-loader 和 style-loader。

css-loader 会遍历 CSS 文件,然后找到 url() 表达式然后处理他们,style-loader 会把原来的 CSS 代码插入页面中的一个 style 标签中。

接下来我们使用以下命令来安装 css-loader 和 style-loader(全局安装需要参数 -g)。

执行以上命令后,会再当前目录生成 node_modules 目录,它就是 css-loader 和 style-loader 的安装目录。

接下来创建一个 style.css 文件,代码如下:

复制代码
body {
    background: yellow;
}



配置plugin

插件在 webpack 的配置信息 plugins 选项中指定,用于完成一些 loader 不能完成的工作。

webpack 自带一些插件,可以通过 npm 安装一些插件。

使用内置插件需要通过以下命令来安装:

npm install webpack --save-dev

比如我们可以安装内置的 BannerPlugin 插件,用于在文件头部输出一些注释信息。

一个实例

下面是一个小型项目的Webpack配置文件

复制代码
const path = require('path'); // 引入path模块
const webpack = require('webpack'); // 引入webpack
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 引入html-webpack-plugin插件
const ExtractTextPlugin = require('extract-text-webpack-plugin'); // 引入css分离插件
const { devtools } = require('vue');
const { entry, output } = require('../webpack.config.cjs');
const { Plugin } = require('webpack');

module.exports = { 
    devtools:'eval-source-map',
    entry:path.join(__dirname,'../src/main.js'),
    output:{ 
        path:path.join(__dirname,'../dist'),
        filename:'bundle.js'
    },

    devServer:{
        //静态资源根目录
        contentBase:'./static',
        historyApiFallback: true,
        inline:true,
        compress:true,
        port:8080,
        hot:true
    },

    module:{
        rules:[
            {
                test:/\.html$/,
                use:'html-loader'
            },
            {
                test:/\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                })
            },
            {
                test:/\.js$/,
                exclude: /node_modules/,
                use:{
                    loader:'babel-loader',
                }
            },
            {
                test:/\.(scss|less)$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: [
                        {
                            loader: "css-loader",
                            options: {
                                url: false,
                                minimize: true,
                                sourceMap: true
                            }
                        },
                        {
                            loader:'sass-loader',
                            options:{
                                sourceMap:true
                            }
                        },
                    ]
                })
            },
            {
                test:/\.(woff2|eot|gttf|otf|svg)$/,
                use:{
                    loader:'file-loader'
                },
            },
            {
                test:/\.(png|jpg|gif)$/,
                use:{
                    loader:'url-loader',
                    options:{
                        limit:8192
                    }
                }
            }

        ]
    },

    plugins:[
        new webpack.HotModuleReplacementPlugin(),

        new HtmlWebpackPlugin({
            
            title:'vue-webpack-demo', 
            filename:'index.html',
            template:'./src/index.html',
            favicon:'./src/favicon.ico',
            inject:true,
            hash:true
        }),

        // 引入以作为其他插件的依赖
        new webpack.ProvidePlugin({
            $:'jquery',
            jQuery:'jquery',
            'window.jQuery':'jquery'
        }),

        new ExtractTextPlugin('style.css'), // 将css提取成单独的文件
    ]
};

参考链接

  1. https://www.cnblogs.com/ljbguanli/p/19243924
  2. https://www.runoob.com/w3cnote/webpack-tutorial.html
相关推荐
智者知已应修善业1 小时前
【4060BD_5V应用电路图】2022-12-24
驱动开发·经验分享·笔记·硬件架构·硬件工程
dy17172 小时前
vue2树节点刷新后定位到上一节点展开
vue.js
小李不想当小白4 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
高级程序源6 小时前
django大学生创新创业项目管理系统94923-计算机课程设计、毕业设计
javascript·vue.js·spring boot·后端·python·django·课程设计
2601_965384266 小时前
口腔黏膜清洁的工程化路径:从表面形貌表征到清洁策略匹配
经验分享·笔记
泡泡鱼(敲代码中)6 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
Hotchip_MEMS8 小时前
传统咪头与MEMS硅麦:雾化器气流传感方案对比
人工智能·笔记·物联网·电脑·制造
志尊宝8 小时前
Vue3 零基础每日笔记(040):Vite 创建 Vue3 + TS 项目——企业标配从这一篇开始
笔记·vue·html·前端开发·软件开发
水云桐程序员8 小时前
量子力学概论,量子力学概念总结
笔记·科技·学习·量子计算
darin_ฅ( ̳• ◡ • ̳)ฅ19 小时前
【 Obsidian】2026版-Obsidian安装Automatic Table of Contents 插件一键生成文章目录
笔记