webpack学习之路(一)

栏目: 编程语言 · 发布时间: 5年前

内容简介:目前最新的版本是v4.32.2,webpack4升级之后,增加了很多新特性webpack是个模块打包机,无论什么资源都会被打包成模块,模块之间是有引用关系的,所以会构建一个关系依赖图,那么我们需要一个入口文件,从这个入口开始一步一步查找依赖关系,加载模块。我们需要在

目前最新的版本是v4.32.2,webpack4升级之后,增加了很多新特性

  • 不在支持Node.js 4
  • 移除CommonChunkPlugin,增加optimization
  • 支持WebAssembly
  • 支持多种模块类型
  • 增加mode配置
  • 零配置模块打包
  • 更快的构建时间,速度提升了98%

配置

1.entry

webpack是个模块打包机,无论什么资源都会被打包成模块,模块之间是有引用关系的,所以会构建一个关系依赖图,那么我们需要一个入口文件,从这个入口开始一步一步查找依赖关系,加载模块。

我们需要在 webpack.config.js 配置

module.exports = {
  entry: './path/to/my/entry/file.js'
};
复制代码

上面这个例子是一个单入口,也就是单页应用所使用的配置, 那么如果是多页应用,配置就需要改一下

module.exports = {
  entry: {
      index: './path/to/my/entry/list.js',
      list: './path/to/my/entry/list.js'
  }
};
复制代码

多入口,需要定义成Object对象,key之后还会被使用

2.output

output 属性告诉 webpack 在哪里输出它所创建的 bundles ,以及如何命名这些文件,默认值为 ./dist

无论是单入口还是多入口,只能指定一个output

filename
path

单入口的配置如下

const config = {
  output: {
    filename: 'bundle.js',
    path: '/home/proj/public/assets'
  }
};
复制代码

多入口配置

{
  entry: {
    app: './src/app.js',
    search: './src/search.js'
  },
  output: {
    filename: '[name].js',
    path: __dirname + '/dist'
  }
}
复制代码

filename 应该使用占位符来确保每个文件具有唯一的名称,占位符取值就是 entry 里的 key

3.mode

mode 是webpack4新增的特性。 提供两个选择:

选项 描述
development 会将 process.env.NODE_ENV 的值设为 development 。启用 NamedChunksPluginNamedModulesPlugin
production 会将 process.env.NODE_ENV 的值设为 production 。启用 FlagDependencyUsagePlugin , FlagIncludedChunksPlugin , ModuleConcatenationPlugin , NoEmitOnErrorsPlugin , OccurrenceOrderPlugin , SideEffectsFlagPluginUglifyJsPlugin

综合来说就是会默认启用对当前环境设置的默认插件,方便开发或者有利于打包输出。 可以直接在webpack.config.js里配置,也可以在命令里直接添加参数

module.exports = {
  mode: 'production'
};
复制代码
webpack --mode=production
复制代码

4.loaders

webpack 开箱即用的只有 jsjson 两种文件类型,想要支持其他文件类型的源代码转换就需要 loader 。比如 es6 转换需要 babel-loader , css 转换需要 css-loader , typeScript 转换需要 ts-loader

loader 本身是一个函数,接收源文件作为参数,返回转换的结果。

推荐配置,在 webpack.config.js 文件中指定 loader

module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          }
        ]
      }
    ]
  }
复制代码

注意:多个loader的情况下,是按照从右到左的顺序执行,要注意书写顺序。

5.plugins

插件是 webpack 的支柱功能,是对webpack功能的增强。 可以做打包文件的优化压缩,资源的管理,环境变量注入等 loader 无法实现的事情。

webpack 插件是一个具有 apply 属性的 JavaScript 对象。apply 属性会被 webpack compiler 调用,并且 compiler 对象可在整个编译生命周期访问。

换句话说, plugins 可以作用于整个构建过程。

由于插件可以携带参数/选项,你必须在 webpack 配置中,向 plugins 属性传入 new 实例。

webpack.config.js:

const HtmlWebpackPlugin = require('html-webpack-plugin'); //通过 npm 安装
const webpack = require('webpack'); //访问内置的插件
const path = require('path');

const config = {
  entry: './path/to/my/entry/file.js',
  output: {
    filename: 'my-first-webpack.bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        use: 'babel-loader'
      }
    ]
  },
  plugins: [
    new webpack.optimize.UglifyJsPlugin(),
    new HtmlWebpackPlugin({template: './src/index.html'})
  ]
};

module.exports = config;
复制代码

以上所述就是小编给大家介绍的《webpack学习之路(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java编程思想

Java编程思想

[美] Bruce Eckel / 陈昊鹏、饶若楠 / 机械工业出版社 / 2005-9 / 95.00元

本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。 从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到......一起来看看 《Java编程思想》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具