webpack

作者: 稻草人_9ac7 | 来源:发表于2019-10-07 22:54 被阅读0次

webpack

目录

webpack介绍

  1. 是一款打包构建工具,目前就流行打包构建工具
  2. 特点
    1. 一切皆模块
    2. 能把所有资源打包成浏览器能识别的html,css,js,png

nodejs模块系统

  1. js模块系统规范

    • ES6(掌握)
    • AMD规范(了解) requirejs使用
    • CMD规范(了解) sea.js使用
    • commonjs规范 nodejs使用
  2. nodejs 模块系统遵循 commonjs 模块规范

  3. 导出模块

    // m1.js
    const cat = {
        age: 2,
        name: '白猫'
    }
    module.exports = cat;
    
  1. 导入模块
// index.js
const aa = require('./cat.js');
consoe.log(aa.name);
  1. 测试 打开命令提示父,进入 index.js 所在目录,运行 node index.js 看是否打印出"白猫"

demo01 入口和出口

目录

  1. 入口和出口是什么
  2. 配置文件webpack.config.js
  3. mode设置(模式设置)
  4. 打包命令webpack

概念

  1. 入口 入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。
  2. 出口 output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。

具体例子

  1. 新建文件夹demo1.0
  2. 初始化package.json npm init -y
  3. 新建main.js,m1.js,m2.js
// main.js
const m1 = require('./m1');

console.log('main.js');
// m1.js
const m2 = require('./m2');
console.log('我是m1.....');
// m2.js
console.log('我是m2.....');
  1. webpack配置文件

    // 导入nodejs的path
    const path = require('path');
    
    module.exports = {
        // 入口配置
        entry: './main.js',
        // 出口配置
        output: {
            // 打包后的文件名称
            filename: 'laohu.js',
            // 配置打包后的路径,__dirname当前目录,
            path: path.resolve(__dirname, 'dist')
        },
        mode: 'production'
    }
    
    1. 运行webpack,打包成功会在本地创建一个dist文件夹,里面有一个laohu.js

demo02 loader配置

  1. loader是什么
  2. css-loader配置
  3. less-loader配置

loader是什么

在webpack眼里,一切皆模块,js、css、img、txt、vue等统统都是模块,但webpack默认只认识js模块,其它文件都需要配置相应的加载器(loader)才能正确的识别,比如css要配css-loader,vue要配vue-loader

配置css-loader

  1. npm init 初始化package.json

  2. 安装style-loader

    npm i style-loader --save-dev
    
  3. 安装css-loader

    npm i css-loader --save-dev
    
  1. 配置webpack.config.js

    var path = require('path');
    module.exports = {
        mode: 'development',
        entry: './main.js',
        output: {
            filename: 'main-webpack.js',
            path:  path.resolve(__dirname,'dist')
        },
        module: {
            rules: [
                {
                   test: /\.css$/,
                   use: ['style-loader', 'css-loader']
                }
            ]
        }
    }
    
  1. 创建style.css

    body {
        background: gray;
    }
    
  2. 创建main.js,导入style.css

    require('./style.css');
    
    console.log('在这里做的别的事情')
    
  3. 运行打包命令 webpack

  4. 检验: 在dist(打包后生成的文件夹)文件夹内新建index.html,导入main-webpack.js,然后打开,看网页的背景颜色是否为灰色

配置less-loader

  1. 安装less 和 less-loader(可以批量安装)
npm install --save-dev less-loader less style-loader css-loader
  1. webpack配置

    // path是nodejs的路径处理插件
    const path = require('path');
    module.exports = {
        // 模式 production-生产环境  development-开发环境
        mode: 'development',
        // 入口
        entry: './main.js',
        // 出口
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'index.js'
        },
        module: {
            rules: [{
                test: /\.less$/,
                use: [{
                    loader: "style-loader" // creates style nodes from JS strings
                }, {
                    loader: "css-loader" // translates CSS into CommonJS
                }, {
                    loader: "less-loader" // compiles Less to CSS
                }]
            }]
        }
      };
    
  2. 新建main.js和app.less

    // main.js
    require('./app.less');
    console.log('在这里做的别的事情')
    
// app.less

div {
    h3 {
        color: red;
        font-size: 30px
    }
}
  1. 检验:在dist文件夹新建index.html,导入打开看看h3是否变了颜色

    <!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>
        <script src="./index.js"></script>
    </head>
    <body>
        <div>
            <h3>
                这是h3
            </h3>
        </div>
    </body>
    </html>
    

demo03 plugins(插件)

目录

  1. 插件是什么,有什么用
  2. 配置生成html的插件
  3. 定义全局变量的插件

插件是什么,有什么用

oader 被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。

配置生成html的插件

  1. 安装html-webpack-plugin
npm i html-webpack-plugin
  1. webpack.config.js的配置如下

    // 最简单的配置

    const path = require('path');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    module.exports = {
        mode: 'development',
        entry: './main.js',
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'main-webpack.js'
        },
        plugins: [new HtmlWebpackPlugin()]
      };
    

    // 用指定的模板生成html文件

const path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    mode: 'development',
    entry: './main.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'main-webpack.js'
    },
    plugins: [
      new HtmlWebpackPlugin({
          filename: 'index.html',
          template: './tpl.html'
        })
    ]
  };

// 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>vue项目</title>
</head>
<body>
  <div id="app"></div>
</body>
</html>

配置生成全局变量的插件

  1. 安装html-webpack-plugin和webpack
npm i html-webpack-plugin webpack
  1. webpack.config.js配置

    const webpack = require('webpack');
    const htmlWebpackPlugin = require('html-webpack-plugin');
    const path = require('path');
    module.exports = {
        // 模式 production-生产环境  development-开发环境
        mode: 'development',
        // 入口
        entry: './main.js',
        // 出口
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'main-webpack.js'
        },
        plugins:[
            new htmlWebpackPlugin(),
            new webpack.DefinePlugin({
                // 值是字符串的时候需要多加一个引号
                'username': '"老胡"',
                'process.env.baseUrl': '"http://huruqing.cn"'
            })
        ]
      };
    
    
    1. main.js内容

      console.log('useranme:',username);
      console.log('baseUrl:',process.env.baseUrl);
      

​ 4. 运行webpack打包命令,打开dist里的index.html文件,检查控制台的打印结果

相关文章

网友评论

      本文标题:webpack

      本文链接:https://www.haomeiwen.com/subject/gxdvpctx.html