zoukankan      html  css  js  c++  java
  • webpack4入门教程十分钟上手指南

    Webpack 是基于node编写的,可以看作是模块打包机。它所做的是,分析项目结构,找到js模块以及其他一些浏览器不能直接运行的扩展语言(Scss,TS等),并将其打包成为合适的格式以便供浏览器使用。

    总之一句话:把入口文件打包成一系列静态资源,供浏览器使用。

    用途:

    1.代码转换

    2.文件优化:压缩合并

    3.代码分割:公共模块分离合并,路由懒加载

    4.自动刷新

    5.代码校验

    6.自动发布

    练习流程:

    ---------------------------   打包初体验  -------------------------

    1. 新建文件夹,打开cmd命令行初始化:(出现package.json)

          npm install -g yarn       (如果之前全局安装过yarn则略过)

       yarn init -y

    2. 安装本地webpack: (出现node_modules,  yarn.lock)

       webpack  webpack-cli  -D   

    3. 新建src/index.js入口文件

    console.log('hello webpack'); 

    4. 运行webpack生成dist目录:(出现的dist/main.js是压缩优化后的代码,配置文件中设置mode = ‘development’后则不压缩)

         npx webpack

    5. 新建src/a.js, 写一些CommonJS(node)语法:

    module.exports = 'Edward'

    module.exports输出,然后在src/index.js通过require引入

    此时这样是无法在我们浏览器中跑的,因为这是node 的规范

    6. 在dist文件夹下,新建index.html,让它直接引用打包后的结果main.js

    7. 在浏览器打开发现,通过webpack打包后生成的main.js中的代码可以在浏览器正常运行。

    -------------------------    接下来配置webpack     ------------------------

    8. 新建webpack.config.js 配置文件(由于webpacknode写出来的,所以这个配置文件中要写node的语法)

    9.  添加本地服务器:

       yarn add webpack-dev-server -D

    10.运行本地服务器:(同时可选择配置devServer)

         npx webpack-dev-server

        (或者在package.json中配置脚本:”dev”:”webpack-dev-server”,就可以通过 npm run dev 命令来运行服务)

    但是问题来了,我们总不能每次打包完后,在出口文件夹下再手动创建html并引入js文件吧,所以我们要想办法让出口文件夹自动生成一个引入js文件的html文件

    11.新建src/index.html 文件作为模板

    12.添加html-webpack-plugin插件,下载模块后引入配置文件:

         yarn add html-webpack-plugin -D

    这样每次打包完成后,在dist出口文件夹下的html文件中都会把打包好的js文件自动引入。

    --------------------------       样式处理  ----------------

    13.新建src/a.css

    body {
    	color: 'green';
    }

      新建src/index.css, 

    @import './a.css';
    body {
    	background: red;
    }

         并src/index.js中通过 require(‘index.css’)  的方式引入,

    let str = require('./a.js')
    
    console.log(str)
    
    require('./index.css')

      运行后此时命令行报错need an appropriate loader 需要一个合适的解析器

    14.安装css-loader, style-loader, 分别负责: 解析@import这种语法把css插入到header标签中

         yarn add css-loader style-loader -D

         yarn add less less-loader -D

    15.在配置文件中添加module模块并适配规则:

      用到一个loader时,use后为字符串;

      用到多个loader时,use后为数组。Loader默认解析顺序为从右到左loader还可以写成对象的方式,用来添加更多配置。

    ----------------  es6语法转换  ---------------

    16.安装依赖后在配置文件中添加配置规则

      yarn add babel-loader @babel/core @babel/preset-env -D   

      Yarn add @babel/plugin-proposal-class-properties -D 

     (未完待续。。。)

     

    【附录】:

    // 本配置文件名又可命名为webpackfile.js
    
    
    let path = require('path'); // webpack内置模块
    let HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
        devServer: {
            port: 8080,
            progress:true,
            contentBase: './dist1',
        },
        mode: 'development', // 默认为 production
        entry: './src/index.js',
        output: {
            filename: 'bundle.js', // 打包后的文件名,默认为main.js
            path: path.resolve(__dirname,'dist1') // 路径必须是一个绝对路径
        },
        plugins:[ // plugins 是个数组,放着各种webpack插件的配置
            new HtmlWebpackPlugin({
                template: './src/index.html', // 以哪个文件作为模板
                filename: 'index.html' // 打包后html文件的名字
            })    
        ],
        module: {
            rules: [
                {
                    test: /.js$/,
                    use: {
                        loader: 'babel-loader',
                        options: { // 用babel-loader 需要把es6转化为es5
                            presets: [
                                '@babel/preset-env' // 转换es6箭头函数等语法
                            ],
                            plugins: [
                                '@babel/plugin-proposal-class-properties' // 转化es6的Class类
                            ]
                        }
                    }
                },
                {   
                    // 处理css文件
                    test: /.css$/,
                    use:[
                        {
                            loader: 'style-loader', // 把css插入到header标签中
                            // options: {
                            //     insertAt: 'top'
                            // }
                        },
                        'css-loader' // 解析@import这种语法
                    ]
                },
                { 
                    // 处理less文件
                    test: /.less$/,
                    use:[
                        {
                            loader: 'style-loader', // 把css插入到header标签中
                            // options: {
                            //     insertAt: 'top'
                            // }
                        },
                        'css-loader', // 解析@import这种语法
                        'less-loader' // 作用:less -> css
                    ]
                }
            ]
        }
    }
  • 相关阅读:
    CentOS
    Docker
    Chart的简单使用
    DataGridView中间插入数据行
    获取每个月的固定的第n个星期几
    设置只能开启一个程序实例
    DataContext与实体类
    Attribute
    Delegate
    Event
  • 原文地址:https://www.cnblogs.com/edwardwzw/p/12323342.html
Copyright © 2011-2022 走看看