博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊聊webpack
阅读量:6331 次
发布时间:2019-06-22

本文共 1877 字,大约阅读时间需要 6 分钟。

webpack是现代前端开发中最火的模块打包工具,只需要通过简单的配置,便可以完成模块的加载和打包。那它是怎么做到通过对一些插件的配置,便可以轻松实现对代码的构建呢?很早之前因为GitHub的自带webpack我对webpack没有太多的印象现结合之前看过的文章和自己的整理 来浅谈一下webpack

Webpack的配置

const path = require('path');module.exports = {  entry: "./app/entry", // string | object | array  // Webpack打包的入口  output: {  // 定义webpack如何输出的选项    path: path.resolve(__dirname, "dist"), // string    // 所有输出文件的目标路径    filename: "[chunkhash].js", // string    // 「入口(entry chunk)」文件命名模版    publicPath: "/assets/", // string    // 构建文件的输出目录    /* 其它高级配置 */  },  module: {  // 模块相关配置    rules: [ // 配置模块loaders,解析规则      {        test: /\.jsx?$/,  // RegExp | string        include: [ // 和test一样,必须匹配选项          path.resolve(__dirname, "app")        ],        exclude: [ // 必不匹配选项(优先级高于test和include)          path.resolve(__dirname, "app/demo-files")        ],        loader: "babel-loader", // 模块上下文解析        options: { // loader的可选项          presets: ["es2015"]        },      },  },  resolve: { //  解析模块的可选项    modules: [ // 模块的查找目录      "node_modules",      path.resolve(__dirname, "app")    ],    extensions: [".js", ".json", ".jsx", ".css"], // 用到的文件的扩展    alias: { // 模块别名列表      "module": "new-module"      },  },  devtool: "source-map", // enum  // 为浏览器开发者工具添加元数据增强调试  plugins: [ // 附加插件列表    // ...  ],}复制代码

从上面我们可以看到,webpack配置中需要理解几个核心的概念

Entry 、Output、Loaders 、Plugins、 Chunk

个人浅谈我理解的以下关键字

Entry:指定webpack开始构建的入口模块,从该模块开始构建并计算出直接或间接依赖的模块或者库

Output:告诉webpack如何命名输出的文件以及输出的目录(地址)

Loaders:由于webpack只能处理javascript,所以我们需要对一些非js文件处理成webpack能够处理的模块,比如sass(sccs)文件

Plugins: Loaders将各类型的文件处理成webpack能够处理的模块,plugins有着很强的能力。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。但也是最复杂的一个。比如对js文件进行压缩优化的UglifyJsPlugin插件

Chunk:coding split的产物,我们可以对一些代码打包成一个单独的chunk,比如某些公共模块,去重,更好的利用缓存。或者按需加载某些功能模块,优化加载时间。在webpack3及以前我们都利用CommonsChunkPlugin将一些公共代码分割成一个chunk,实现单独加载。在webpack4 中CommonsChunkPlugin被废弃,使用SplitChunksPlugin

后面还会写自己理解的tapable未还待续

转载地址:http://fkboa.baihongyu.com/

你可能感兴趣的文章
linux下sprintf_s函数的替代
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Microsoft.Web.Administration.ServerManager启用IIS的ISAPI
查看>>
关于批量数据更新的问题(C#高性能)
查看>>
[转]Reactor模式,或者叫反应器模式
查看>>
Visual Studio Test Project的一个小问题
查看>>
How to Uninstall/Reinstall 10g CRS Clusterware?
查看>>
Java数据导入(读)Excel文件 解析
查看>>
webSVN客户端(转) - initOS的日志 - 网易博客
查看>>
linux touch命令
查看>>
题目1471: A+B without carry
查看>>
2013 年4月6日
查看>>
Linq分页
查看>>
ExtJs4表单textfield中的验证使用以及自定义的vtype的使用
查看>>
mysql数据导入到infobright
查看>>
C/C++文件——数据写入、读取
查看>>
方法返回javascript学习实录 之二(数组操作等等utils) --刘啸尘
查看>>
web页面中常见可用字符以及HTML实体
查看>>
透明设置Android:将activity设置为弹出式的并设置为透明的
查看>>
幸福框架:发布订阅模式 之 同步订阅、异步订阅和离线订阅
查看>>