使用webpack指定配置进行打包

1. 指定配置文件执行打包

我们前面的使用只是使用的命令行操作,我们知道,使用webpack命令的时候可以传递一些参数,但是如果参数很多的话,命令会编写的很长,而且每次都要写这么长,显得比较麻烦,因此我们比较推荐使用配置文件来配置webpack打包时的一些参数。

这里我们说明一下,我们以后养成一个好习惯,就是将我们的源代码放到src目录下,将打包生成的文件放到dist目录下,比如我们的目录结构可以是这样的:
在这里插入图片描述

1.1 简单配置

在项目的根目录创建一个webpack.config.js文件,在里面添加内容:

var path = require('path');
module.exports = {
    // 打包起始的文件
    entry: './src/js/1.js',

    // 打包后的输出配置
    output: {
        // 打包后的保存文件目录,这里需要是个绝对路径(可手动指定),
        path: path.resolve(__dirname, 'dist'),
        // 打包输出后保存的文件名
        filename: '1.b.js'
    }
}

然后直接在命令行中使用命令:

npx webpack
# 或者(监听文件变化的话,如果修改配置文件内容后仍需要手动重新执行命令)
npx webpack --watch

其实使用配置文件,和我们之前的命令行打包是一样的,只是不用每次打包的时候都输很长的命令,因为都在配置文件中指定了。

1.2 多个打包入口,单个出口的配置
var path = require('path');
module.exports = {
    // 打包起始的文件
    entry: ['./src/js/1.js', './src/js/2.js'],

    // 打包后的输出配置
    output: {
        // 打包后的保存文件目录,这里需要是个绝对路径(可手动指定),
        path: path.resolve(__dirname, 'dist'),
        // 打包输出后保存的文件名
        filename: '1.b.js'
    }
}
1.3 多个打包入口,多个出口的配置(带名字的)
var path = require('path');
module.exports = {
    // 打包起始的文件
    entry: {
        page1: ['./src/js/1.js', './src/js/2.js'],
        page2: './src/js/3.js'
    },

    // 打包后的输出配置
    output: {
        // 打包后的保存文件目录,这里需要是个绝对路径(可手动指定),
        path: path.resolve(__dirname, 'dist'),
        // 可以使用占位符自动生成出口文件名,常用占位符有[name]、[id]、[hash]、[chunkhash]
        filename: '[hash]-[name].b.js'
    }
}

2. html-webpack-plugin 的使用

首先我们先了解一些什么是pluginplugin 翻译成中文就是插件的意思,webpack提供了插件功能支持,可以方便的使用插件进行功能的扩展,webpackplugin的配置很简单:plugins 配置项接收一个数组,数组里的每一项都是一个要使用的plugin的实例,plugin需要的参数通过构造函数传入。

2.1 安装插件

html-webpack-plugin 有一个基本功能是:根据模板文件生成对应的html代码,下面我们先安装一下它。

# 安装 html-webpack-plugin
npm install html-webpack-plugin --save-dev
2.2 单模板的基本使用:
var path = require('path');
// 引入插件
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    // 打包起始的文件
    entry: {
        page1: ['./src/js/1.js', './src/js/2.js'],
        page2: './src/js/3.js'
    },
    // 打包后的输出配置
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: '[hash]-[name].b.js',
        // 可以设置上线后的地址(生成的html引用的是绝对路径)
        publicPath:'http://www.baidu.com'
    },
  	// 这里是配置插件的部分
    plugins:[
        // 使用插件
        new HtmlWebpackPlugin({
            // 指定生成html使用的模板
            template:'./index.html'
        })
    ]
};

使用上面的配置我们会发现:不仅我们的代码会自动打包,同时自动生成了html代码,而且将打包生成的静态资源直接引用到html 结构中。不过,生成的jshtml在同一个目录,我们实际中可能不是这样处理的,那么我们可以稍作修改:

var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: {
        page1: ['./src/js/1.js', './src/js/2.js'],
        page2: './src/js/3.js'
    },

    output: {
        path: path.resolve(__dirname, 'dist'),
        //输出的打包文件可以加个目录
        filename: 'js/[hash]-[name].b.js'
    },

    plugins:[
        new HtmlWebpackPlugin({
            template:'./index.html'
        })
    ]
};

当然了,上面的配置,打包后,我们发现生成的html文件始终叫index.html,我们其实是可以修改的,只需要在使用插件的时候配置一下filename项就行了。

plugins:[
    new HtmlWebpackPlugin({
        template:'./index.html',
        //自动生成文件名
        filename:'[hash].html',
        //需要将脚本引入标签嵌入到何处。可以是:body|head|true|false等
        inject: 'body'
    })
]

在模板中使用插件变量(选看)

这个功能类似于模板引擎的自定义标记。我们可以在模板中使用特殊的标记来访问插件中设置的变量

比如我们的插件中是这样设置的:

plugins:[
    new HtmlWebpackPlugin({
        template:'./index.html',
        filename:'[hash].html',
        inject: 'body',
        minify:{
                //自动删除注释
                removeComments:true
            },
      	// 在这里自定义了变量
        xxxx: 112233,
        yyyy: 1+2
    })
]

那么我们的html模板中可以这样使用它们:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<!--htmlWebpackPlugin注意大小写,它就叫这名字,和其它变量无关-->
<%= htmlWebpackPlugin.options.xxxx %>
<%= htmlWebpackPlugin.options.yyyy %>
<div class="xx"></div>
</body>
</html>
2.3 多模板使用

其实多模板的使用比较简单,只需要多次调用html-webpack-plugin插件即可

var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: {
        page1: ['./src/js/1.js', './src/js/2.js'],
        page2: './src/js/3.js'
    },

    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'js/[hash]-[name].b.js',
        publicPath:'http://www.baidu.com'
    },

    plugins:[
        new HtmlWebpackPlugin({
            template:'./index1.html',
            //自动生成名字
            filename:'index.1.html'
        }),
        new HtmlWebpackPlugin({
            template:'./index2.html',
            //自动生成名字
            filename:'index.2.html'
        })
    ]
};

不过这种打包后,所有html文件引用的都是相同的编译后的js文件,这并不是我们想要的,我们有时候需要不同的页面引入不同的编译后的文件,比如上面的配置会生成index.1.htmlindex.2.html两个html,同时会打包生成两个js文件,我想让index.1.html引入page1编译后的文件,index.2.html引入page2编译后的文件。怎么办呢?我们可以用该插件的chunks配置项。

2.3.1 指定生成的html文件引入编译后的文件
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: {
        page1: ['./src/1.js', './src/2.js'],
        page2: './src/3.js'
    },

    output: {
        path: path.resolve(__dirname, 'dist'),
        //输出的打包文件可以加个目录
        filename: 'js/[hash]-[name].b.js',
    },

    plugins:[
        new HtmlWebpackPlugin({
            template:'./1.html',
            //自动生成名字
            filename:'index.1.html',
            chunks:['page1']
        }),
        new HtmlWebpackPlugin({
            template:'./2.html',
            //自动生成名字
            filename:'index.2.html',
            chunks:['page2']
        })
    ]
};

chunks配置项的值是个数组。除了该配置项之外,还有一个功能正好相反的配置项:excludeChunks,表示排除引用哪些chunk。

关于该插件的使用,可以参考:

https://segmentfault.com/a/1190000007294861

https://segmentfault.com/a/1190000013883242

https://www.jianshu.com/p/08a60756ffda

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要让 Webpack 打包更快,可以尝试以下几个方面的配置: 1. 使用多线程打包插件:可以使用 thread-loader 或者 HappyPack 这类插件,让 Webpack 在多线程的情况下进行打包,从而提高打包速度。 2. 使用缓存:可以使用 cache-loader 或者 hard-source-webpack-plugin 这类插件,将打包过程中的中间结果进行缓存,下次打包时可以直接使用缓存,从而减少打包时间。 3. 按需加载:可以使用动态导入的方式,将不常用的代码按需加载,从而减少初始加载时间。 4. 优化代码:可以使用 tree shaking、code splitting、webpack-bundle-analyzer 等技术,来优化代码的打包结果,从而减少打包时间和文件大小。 除了以上几个方面的配置,还可以适当增加硬件资源,比如 CPU 核数、内存等,来提高打包速度。另外,可以注意以下几点: 1. 将 loader 应用于最少的文件:尽量避免将 loader 应用于所有文件,而是只将其应用于需要它的文件。 2. 减少查找范围:可以使用 resolve.modules、resolve.extensions 等配置项,来减少 Webpack 查找文件的范围。 3. 指定 context:可以使用 context 配置项,来指定 Webpack 的上下文路径,从而减少查找范围。 4. 使用 DllPlugin:可以使用 DllPlugin 和 DllReferencePlugin 这两个插件,将一些不太变化的代码提前打包成静态库,从而减少打包时间。 总之,要让 Webpack 打包更快,需要从多个方面进行优化,综合考虑各种因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值