IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> webpack——样式资源、html资源、图片资源、其他资源、devServer -> 正文阅读

[JavaScript知识库]webpack——样式资源、html资源、图片资源、其他资源、devServer

webpack

打包样式资源

css-loader、style-loader

npm i css-loader style-loader -D

css文件

html,
body {
    margin: 0;
    padding: 0;
    height: 100%;
    background-color: sandybrown;
}

#box {
    width: 300px;
    height: 300px;
    background-color: seashell;
    border: 1px solid palegoldenrod;
    border-radius: 10px;
}

#box p {
    text-align: center;
    font-size: 20px;
    color: rgb(95, 94, 94);
}

less文件

    .title {
        color: gold;
font-weight: bolder;
    }
    #box {
    width: 300px;
    height: 300px;
    background-color: seashell;
    border: 1px solid palegoldenrod;
    border-radius: 10px;
}

#box p {
    text-align: center;
    font-size: 20px;
    color: rgb(95, 94, 94);
}

js文件(入口文件)

// 入口文件
import './base.less';
import './index.css';

webpack配置文件:webpack.config.js

作用:运行webpack(打包)时,会根据这里面的配置项来进行加载

所有的构建工具都是基于node.js平台运行,node.js默认采用CommentJS模块化,而src中的源代码采用的是ES6模块化

__dirname:是node.js的一个变量,代表当前文件(webpack.config.js)的目录的绝对路径

/* 
webpack.config.js:webpack的配置文件
*/
// 解构得到resolve,用来拼接绝对路径的方法
// const { resolve } = require('path');
const path = require('path');

module.exports = {
    // webpack配置
    // 入口起点文件
    entry: './src/index.js',
    // 输出文件的配置项
    output: {
        // 输出的文件名
        filename: 'main.js',
        // 输出路径
        // __dirname:是node.js的一个变量,代表当前文件(webpack.config.js)的目录的绝对路径
        // resolve(__dirname, 'dist'):将当前文件的绝对路径和dist进行拼接===./dist
        path: path.resolve(__dirname, 'dist')
    },
    // loader的配置
    module: {
        rules: [
            // 详细loader配置,不同文件配置不同的loader rules
            {
                // 先匹配样式资源(.css),然后再将文件变成commonjs模块,然后在页面的head中创建style标签,再引入上一步生成的commonjs模块
                // 匹配哪些文件
                test: /\.css$/,
                // 使用哪些loader进行处理
                // use数组中loader执行顺序:从左到右,从上到下
                use: [
                    // 创建style标签,将js中的样式资源插入进行,添加到head中生效
                    'style-loader',
                    // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
                    'css-loader'
                ]
            }, {
                test: /\.less$/,
                //使用多个loader,就用use,将loader放进数组里面
                use: [
                    'style-loader',
                    'css-loader',
                    // 将less文件编译成css文件,在同一文件夹下,不能存在less文件名和css文件名重复的情况,否则less文件的内容样式会将覆盖掉css文件的内容样式(css样式和less样式一致)
                    // 需要下载less-loader和less
                    'less-loader'
                ]
            }
        ]
    },
    // plugins的配置
    // plugins: {},
    // 模式的配置
    // 生产模式
    // mode:'production'
    // 开发模式
    mode: 'development'

}

过程:

npm init -y
npm i webpack webpack-cli -D
npm i css-loader style-loader -D
npm i less less-loader -D
打包:
第一种方式:
webpack ./src/index.js -o ./dist --mode=development
第二种方式:简写的打包方式
webpack

在dist文件夹下创建一个html文件,引入打包好的文件,检测打包使用是否成功

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h3 class="title">人生长途漫漫</h3>
    <div id="box">
        <p>好好学习——天天向上</p>
        <p>干饭人,干饭魂,干饭的都是人上人</p>
    </div>
    <script src="./main.js"></script>
</body>

</html>

loader(模块):1.下载,2.使用(配置loader)

plugins(插件):1.下载,2.引入,3.使用

打包html资源

安装:

npm i html-webpack-plugin -D

引入

//HtmlWebpackPlugin是一个构造函数(类)
const HtmlWebpackPlugin = require('html-webpack-plugin')

使用

const path = require('path')
//插件必须要引入了才可以使用
const HtmlWebpackPlugin = require('html-webpack-plugin')


module.exports = {
    entry: './src/index.js',
    output: {
    //输出的文件名
        filename: 'index.js',
        //输出的文件所在地
        path: path.resolve(__dirname, 'dist')
    },
    //模块
    module: {
        rules: [
            // loader的配置
        ]
    },
    //在这里使用插件
    plugins: [
        // plugins的配置
        //作用:会默认创建一个空的HTML(没有样式和结构),引入打包输出的所有资源(js/css)
        //new HtmlWebpackPlugin()
        //需要有结构的HTML文件
        new HtmlWebpackPlugin({
        //创建(复制)template中的文件,并自动引入打包输出的所有资源(js/css)
        	template:'./src/index.html'
        })
        
    ],
    //开发模式
    mode: 'development'
}

打包图片资源

下载依赖包

npm i url-loader file-loader -D
//url-loader依赖于file-loader

使用

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'index.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [{
                //问题:url-loader只处理在样式表(css/less)中使用的图片,默认处理不了html中的img图片
                // 处理图片资源
                test: /\.(jpg|png|gif)$/,
                //只有一个loader,就不需要use
                loader: 'url-loader',
                options: {
                    //图片大小小于8kb,就会被base64处理
                    //优点:减少请求数量(减轻服务器压力),缺点:图片体积会更大(文件请求速度更慢)。对8-12kb进行base64处理
                    limit: 8 * 1024,
                    //src=[object Module]问题:url-loader用的是ES6模块的引入,htnl-loader用的是commonjs,所以url-loader解析不了html-loader引入的图片
                    //解决:关闭url-loader的es6模块化,使用commonjs解析。解析过后,打包后的图片路径就是根据图片内容而形成的唯一的哈希值构成图片路径
                    esModule: false,
                    //给图片进行重命名(因为哈希值太长了)
                    //[hash:10]取图片生成的hash的前10位
                    //[ext]取文件原来扩展名
                    name: '[hash:10].[ext]',
                    // 构建输出到指定的文件下
                    outputPath: 'imgs'
                },
            },
            {
                test: '/\.html$/',
                //处理html文件的img图片(只负责引入img,从而能被url-loader进行处理)
                //使用的是commonjs模块的引入,当
                loader: 'html-loader'
            }
        ]
    },
    plugins: [
        // plugins的配置
        new HtmlWebpackPlugin({
            template: './src/index.html'
        })
    ],
    mode: 'development'
}

打包其他资源

其他资源:除了html,css,js资源以外的资源

const path = require('path')
//插件必须要引入了才可以使用
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
    entry: './src/index.js',
    output: {
    //输出的文件名
        filename: 'index.js',
        //输出的文件所在地
        path: path.resolve(__dirname, 'dist')
    },
    //模块
    module: {
        rules: [
            // loader的配置
            {
            	test:/\.css$/,
            	use:['style-loader','css-style']
            },
            //打包其他资源(除了html、js、css资源以外的资源)
            {
            	exclude:/\.(css|js|html)$/,
            	//这个file-loader在之前和那个url-loader安装了
            	loader:'file-loader',
            	options:{
            		name: '[hash:10].[ext]',
					outputPath: 'other'
				}
            }
        ]
    },
    //在这里使用插件
    plugins: [
        new HtmlWebpackPlugin({
        	template:'./src/index.html'
        })
        
    ],
    //开发模式
    mode: 'development'
}

devServer

用来自动编译(打包),自动打开浏览器,自动刷新浏览器

安装

npm i webpack-dev-server -D
const path = require('path')
module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'index.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: []
    },
    plugins: [],
    mode: 'development',
    // 特点:只会在内存中编译打包,不会有任何输出
    // 启动:启动devServer指令:npx webpack-dev-server(所以需要下载这个包,因为是本地下载,所以需要用npx执行)
    // webpack5:npx webpack serve
    devServer: {
        // 要运行的目录(项目构件后的路径)
        contentBase: path.resolve(__dirname, 'dist'),
        // 启动gzip压缩
        compress: true,
        // 在localhost:3000查看结果
        port: 3000,
        // 自动打开浏览器
        open: true
    }
}
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:22:20  更:2021-09-23 11:23:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 0:44:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码