zoukankan      html  css  js  c++  java
  • Webpack快速入门

    什么是Webpack

    顾名思义它是一个前端打包工具,通过给定的入口文件自动梳理所有依赖资源(包括css、图片、js等),并按照配置的规则进行一系列处理(转es5、压缩等),打包生成适合现代生产环境要求的文件。同时也借此竖起技术壁垒,防止后端改代码[滑稽]。

    npm基本操作

    现今前端体系构建在node之上,npm是node的包管理器。webpack、babel等只是工具包,都通过npm安装。

    初始化新项目
    npm init
    全局安装依赖包PACKAGE,不属于具体哪个项目
    npm install --global PACKAGE
    安装运行时依赖包PACKAGE,会打包至最终生成文件
    npm install --save PACKAGE
    安装开发时依赖包PACKAGE,不会出现在生成文件中。webpack就属于开发时用来打包文件,在运行时就不需要它了。
    npm install --save-dev PACKAGE
    执行命令,具体命令配置在package.json中
    npm run COMMAND
    同时以上安装依赖命令也有简写模式
    npm i -g PACKAGE
    npm i -S PACKAGE
    npm i -D PACKAGE

    编写源码

    创建并进入项目文件夹

    mkdir packme
    cd packme
    

    初始化项目

    npm init
    //之后根据提示输入或默认即可。
    

    创建目录app存放源文件

    mkdir app
    

    编写源代码

    //Anim.js
    class Anim {
        constructor(name = 'unnamed') {
            this.name = name;
        }
    
        speak() {
            return `hey, i am ${this.name}`;
        }
    }
    
    export default Anim;
    
    //Sheep.js
    import Anim from './Anim.js'
    class Sheep extends Anim {
        constructor(name, age) {
            super(name);
            this.age = age;
        }
    }
    
    export default Sheep;
    
    //index.js
    import Sheep from './Sheep.js';
    import base from './base.css';
    import index from './index.css';
    
    let sheep = new Sheep('doly', 1);
    let target = document.getElementById('logs');
    target.innerHTML = sheep.speak();
    
    /*base.css*/
    html,
    body {
        padding: 0;
        margin: 0;
        height: 100%;
    }
    
    /*index.css*/
    #logs {
        border: 1px solid #ccc;
        height: 80px;
        overflow: auto;
    } 
    <!-- index.tpl.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="logs"></div>
    </body>
    
    </html>
    

    整体项目目录如图所示

    构建目标

    源码编写好了,梳理一下我们的构建目标。

    js使用了es6,需要转换成es5
    js合并到一个文件
    压缩js
    css合并到一个文件
    压缩css

    开始构建

    安装依赖包

    //webpack 负责整个流程
    npm i -D webpack
    //babel 负责es6转换
    npm i -D babel-core babel-cli babel-loader babel-preset-es2015
    //压缩js
    npm i -D terser-webpack-plugin
    //抽取处理过的css到单独文件(默认css会被当作模块引入js中)
    npm i -D mini-css-extract-plugin
    //压缩css
    npm i -D optimize-css-assets-webpack-plugin
    //将打包后的js、css插入指定html
    npm i -D html-webpack-plugin

    创建webpack配置文件

    //webpack.config.js
    //配置文件本身是js,它交给node执行。所以可以使用模块语法、特殊变量等特性。
    
    //声明引入插件
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const TerserJsPlugin = require('terser-webpack-plugin');
    const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
        mode: 'production',//production默认会压缩代码,development则不会。
        devtool: 'cheap-module-source-map',//控制生成sourceMap的方式
        entry: __dirname + '/app/index.js',//入口文件,多个入口可以对象kv方式传入
        output: {
            path: __dirname + '/build',
            filename: 'bundle-[contenthash:8].js'
        },
        optimization: {
            minimizer: [ //配置js、css压缩器
                new TerserJsPlugin({
                    cache: true,
                    parallel: true,
                    sourceMap: true
                }),
                new OptimizeCssAssetsPlugin()
            ]
        },
        module: {//配置不同文件的处理规则,
            rules: [{
                    test: /.js$/,
                    exclude: /node_modules/,
                    loader: 'babel-loader',
                    query: {//指定babel使用的参数
                        presets: ['es2015']
                    }
                },
                {
                    test: /.css$/,
                    use: [//多个处理器从后往前调用,先预处理好css再抽取到文件
                        MiniCssExtractPlugin.loader,
                        'css-loader'
                    ]
                }
            ]
        },
        plugins: [//配置处理插件
            new HtmlWebpackPlugin({//根据指定模板生成html,包含打包的后js、css
                template: __dirname + '/app/index.tpl.html',
                minify: {
                    minimize: true,
                    collapseWhitespace: true,
                    minifyCSS: true,
                    minifyJS: true
                }
            }),
            new MiniCssExtractPlugin({//合并的css文件配置
                filename: 'style-[contenthash:8].css',
                ignoreOrder: false
            })
        ],
        devServer: {//开发服务器,便于浏览器测试访问
            contentBase: './build',
            port: 8090,
            historyApiFallback: true,
            inline: true
        }
    }
    

    添加构建命令

    //package.json
    //修改scripts配置,加入相关命令
        "scripts": {
            "build": "webpack",
            "dev": "webpack-dev-server"
        },
    

    执行构建

    //开启本地服务器,只用一次
    npm run dev
    //执行webpack构建
    npm run build  

    构建结束,在build目录下生成新文件

     

  • 相关阅读:
    LINQ标准查询操作符(二)——Join、GroupJoin、GroupBy、Concat、
    LINQ标准查询操作符(一)——select、SelectMany、Where、OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse
    LINQ GroupBy
    C# EF使用SqlQuery直接操作SQL查询语句或者存储过程
    mycat工作原理
    Linux系统启动过程详解
    jump堡垒机配置使用
    jumpserver 堡垒机环境搭建(图文详解)
    pip安装
    判断网站响应时间 脚本
  • 原文地址:https://www.cnblogs.com/himax/p/use_webpack_with_quick.html
Copyright © 2011-2022 走看看