3月31号~4月25号 webpack学习日记

一.样式分离

1.文件目录

2.配置文件

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports={
    entry:'./src/app.js',
    output:{
        clean:true,
        filename:'bundle.js'
    },
    mode:'development',
    module:{
        rules:[{
            test:/\.css$/,
            use:[{
                loader:  MiniCssExtractPlugin.loader,
                options:{
                        publicPath:'../'
                }
            },
                'css-loader'
            ]
        }]
    },
    plugins:[
        new MiniCssExtractPlugin({
            filename:'[name].css',
            chunkFilename:'[id].css',
        }),
        new HtmlWebpackPlugin({
            scriptLoading:'blocking'
        }),
    ]
}

二.问卷设计与postcss

1.文件目录

 

2.配置文件

(1).webpack.config.js

module.exports = {
    entry: './src/index.js',
    output: {
        clean: true,
        filename: 'bundle.js'
    },
    mode: 'development',
    module: {
        rules: [
            {
                test: /\.hbs$/,
                use: ['handlebars-loader']
            },
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader','postcss-loader']
            },
        ]
    }
}

(2).index.js

import './wj'
import './wj.css'

(3).wj.hbs

<form action="https://www.baidu.com">
   <div class="wj">
        <h1>{{ title }}</h1>
        <ul class="content">
            <li class="qst">
                {{!-- 循环输出题目 --}}
                {{#each timu}}
                <div class="timu">{{ this.title }}</div>
                <div class="option">
                    {{!-- 循环输出选项 --}}
                    {{#each this.option}}                  
                        {{!-- no 每个选项的序号,this 每次循环的内容 --}}
                        <div no="{{@key}}">{{ this }}</div>
                    {{/each}}
                </div>
                {{/each}}
            </li>
        </ul>
        <button type="submit">提交</button>
    </div>
</form>

(4).wj.json

[
    {
        "title":"题目1",
        "option":["a","a","a","a","a"]
    },
    {
        "title":"题目2",
        "option":["a","a","a","a","a"]
    },
    {
        "title":"题目3",
        "option":["a","a","a","a","a"]
    },
    {
        "title":"题目4",
        "option":["a","a","a","a","a"]
    }
]

(5).wj.css

.wj{
    width: 400px;
    margin: auto;
}
h1{
    color: blue!important;
}
.timu{
    list-style: none;
}
ul,li{
    list-style: none;
}
.option{
    color:var(--highlightColor);
    display: flex;
}
.option div{
    width: 50px;
    height: 30px;
    color: red;
}

三.数据表项目与入口分片

1.文件目录

2. 项目代码

(1).webpack.config.js

const HTMLwebpackPlugin = require('html-webpack-plugin')
module.exports = {
    entry: {
        lib: './src/sort.js',
        index: './src/index.js',
    },
    output: {
        clean: true,
        filename: '[name].js'
    },
    mode: 'development',
    module: {
        rules: [
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader',]
            },
        ]
    },
    plugins: [
        new HTMLwebpackPlugin({
            scriptLoading: 'blocking'
        })
    ]
}

(2).data.json

[
    ["序号", "学生姓名", "学号", "课程视频", "章节测验", "章节学习次数", "讨论", "作业", "考试", "综合成绩"],
    ["1", "谭丽君", "2020231101", "20.0", "0.0", "3.7", "0.0", "6.6", "0.0", "30.3"],
    ["2", "钱小龙", "2020231102", "15.83", "0.0", "1.53", "0.0", "4.8", "0.0", "22.16"],
    ["3", "李添", "2020231103", "17.5", "0.0", "2.8", "0.0", "6.6", "0.0", "26.9"],
    ["4", "夏伟昊", "2020231104", "0.83", "0.0", "0.2", "0.0", "1.8", "0.0", "2.83"],
]

(3).index.css

.dtb {
    width: 1500px;
    margin: auto;
}

.dl{
    display: flex;
}

.dd{
    width: 150px;
    border: 1px solid #eee;
    text-align: center;
}
.a{
    background:url(./shang.png) no-repeat;
    background-size: 15%;
    background-position: 7px 0px;
}
.b{
    background:url(./xia.png) no-repeat;
    background-size: 15%;
    background-position: 7px -8px;
}

(4).index.js

import data from './data.json';
import './index.css';
//import('./sort.js');

//表
let dtb = document.createElement('div');
dtb.className = 'dtb';
dtb.id = 'dtb';
    let i = 0;//第几行
    let id = 1;//第几列
    window.arr=[];
    window.num=0;
data.forEach(el => {
    i++;
    //行
    let dl = document.createElement('div');
    dl.className = 'dl';
    el.forEach(ed =>{
        //单元格
        let dd = document.createElement('div');
        dd.className = 'dd';
        dd.innerText = ed;
        //遍历第几行
        if(i == 1){
            dd.id = id;
            dd.onclick=sort;
            id++;
        }
        //给dl 添加一个子元素 dd
        dl.appendChild(dd);
    })
    //给dtb 添加一个子元素 dl
    dtb.appendChild(dl);
});

document.body.appendChild(dtb);

(5).sort.js

window.sort = function () {
    if (this.id > 2) {
        arr[num] = this.id;
        if (arr.length > 1) {
            if (arr[num - 1] != arr[num]) {
                document.getElementById(arr[num - 1]).className = 'dd';
            }
            if (arr.length % 2 == 1) {
                //2取得整个表数据
                let dtb = document.getElementsByClassName('dl');
                //3循环指定的列的所有行
                for (let i = 1; i < dtb.length - 1; i++) {
                    for (let j = i + 1; j < dtb.length; j++) {
                        //比较指定列的行
                        //console.log(Number(dtb[i].children[this.id - 1].innerHTML))
                        //用冒泡排序
                        let a = Number(dtb[i].children[this.id - 1].innerHTML)
                        let b = Number(dtb[j].children[this.id - 1].innerHTML)
                        if (a > b) {
                            //交换两行的位置
                            let c = dtb[i].innerHTML;
                            dtb[i].innerHTML = dtb[j].innerHTML;
                            dtb[i].children[0].innerHTML = i;
                            dtb[j].innerHTML = c;
                            dtb[j].children[0].innerHTML = j;
                        }
                    }
                } this.className = 'dd b';
            } else if (arr.length % 2 == 0) {
                let dtb = document.getElementsByClassName('dl');
                for (let i = 1; i < dtb.length - 1; i++) {
                    for (let j = i + 1; j < dtb.length; j++) {
                        let a = Number(dtb[i].children[this.id - 1].innerHTML)
                        let b = Number(dtb[j].children[this.id - 1].innerHTML)
                        if (a < b) {
                            let c = dtb[i].innerHTML;
                            dtb[i].innerHTML = dtb[j].innerHTML;
                            dtb[i].children[0].innerHTML = i;
                            dtb[j].innerHTML = c;
                            dtb[j].children[0].innerHTML = j;
                        }
                    }
                } this.className = 'dd a';
            }
        }
        num += 1;
    }
}

// window.sort = function () {
//     arr[num]=this.id;
//     //1按哪一列?
//     let idd = document.getElementById(this.id).className;
//     if (this.id > 2) {
//         this.className += ' a';
//         //2取得整个表数据
//         let dtb = document.getElementsByClassName('dl');
//         //3循环指定的列的所有行
//         for (let i = 1; i < dtb.length - 1; i++) {
//             for (let j = i + 1; j < dtb.length; j++) {
//                 //比较指定列的行
//                 //console.log(Number(dtb[i].children[this.id - 1].innerHTML))
//                 //用冒泡排序
//                 let a = Number(dtb[i].children[this.id - 1].innerHTML)
//                 let b = Number(dtb[j].children[this.id - 1].innerHTML)
//                 if (a > b) {
//                     //交换两行的位置
//                     let c = dtb[i].innerHTML;
//                     dtb[i].innerHTML = dtb[j].innerHTML;
//                     dtb[i].children[0].innerHTML = i;
//                     dtb[j].innerHTML = c;
//                     dtb[j].children[0].innerHTML = j;
//                 }
//             }
//         }
//         this.className = 'dd b';
//         if (idd == 'dd b') {
//             let dtb = document.getElementsByClassName('dl');
//             for (let i = 1; i < dtb.length - 1; i++) {
//                 for (let j = i + 1; j < dtb.length; j++) {
//                     let a = Number(dtb[i].children[this.id - 1].innerHTML)
//                     let b = Number(dtb[j].children[this.id - 1].innerHTML)
//                     if (a < b) {
//                         let c = dtb[i].innerHTML;
//                         dtb[i].innerHTML = dtb[j].innerHTML;
//                         dtb[i].children[0].innerHTML = i;
//                         dtb[j].innerHTML = c;
//                         dtb[j].children[0].innerHTML = j;
//                     }
//                 }
//             }
//             this.className = 'dd a';
//         }
//     }
//     if (arr.length > 1) {
//         if (arr[num - 1] != arr[num]) {
//             document.getElementById(arr[num - 1]).className = 'dd';
//             arr[0] = this.id;
//         };
//     }
//     num += 1;
// }

//
// for(let id=3; id<=10; id++){
//     document.getElementById(id).onclick = sort;
// }

四.异步加载(devserver)

需要安装webpack-dev-server

运行指令“npx webpack serve”

1.文件目录

2.配置文件

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: './src/index.js',
    output: {
        clean: true,
        filename: 'bundle.js',
        // chunKileName:'[name].js'
    },
    mode: 'development',
    // mode: 'prodction',
    devServer: {
        static: {
            publicPath: "/dist/",
            directory: path.join(__dirname, 'dist'),
        },
        port: 3000
    },
    module: {
        rules: [{
            test: /\.css$/,
            use: ['style-loader', 'css-loader']
        }]
    },
    plugins: [
        new HtmlWebpackPlugin()
    ]
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Webpack的最佳方法是按照以下步骤进行: 1. 理解前端工程化概念:Webpack是一个前端模块打包工具,它的目标是将各种资源,如JavaScript、CSS、图片等,打包成最优化的静态资源。在学习Webpack之前,建议先了解前端工程化的概念和相关工具。 2. 掌握基本概念:Webpack有一些重要的概念,如入口(entry)、出口(output)、加载器(loader)、插件(plugins)等。了解这些概念是学习Webpack的关键。 3. 阅读官方文档:Webpack有详细而全面的官方文档,可以在Webpack官方网站上找到。阅读官方文档是学习Webpack的最佳途径,因为它提供了全面而详细的解释和示例。 4. 实践项目:在学习Webpack的过程中,最好通过实践项目来巩固所学知识。可以选择一个简单的项目,通过Webpack来构建和优化,逐步掌握Webpack的各项功能和配置。 5. 学习常用插件:Webpack有很多常用的插件,如HtmlWebpackPlugin、MiniCssExtractPlugin、CleanWebpackPlugin等。学习并掌握这些插件的使用方法,可以帮助你更好地使用Webpack来构建项目。 6. 参考优秀资源:除了官方文档外,还可以参考一些优秀的资源,如博客文章、视频教程、开源项目等。这些资源可以提供更多实用的示例和经验分享,帮助你更好地理解和应用Webpack。 记住,Webpack是一个强大而复杂的工具,需要花费一些时间和精力来学习和掌握。坚持不懈地学习和实践,你将能够熟练地使用Webpack来构建高效的前端项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值