Module

module 配置如何处理模块。

配置 Loader

rules  配置模块的读取和解析规则,通常用来配置 Loader。其类型是一个数组,数组里每一项都描述了如何去处理部分文件。 配置一项 rules 时大致通过以下方式:

  1. 条件匹配:通过  test 、 include 、 exclude  三个配置项来命中 Loader 要应用规则的文件。
  2. 应用规则:对选中后的文件通过 use 配置项来应用 Loader,可以只应用一个 Loader 或者按照从后往前的顺序应用一组 Loader,同时还可以分别给 Loader 传入参数。
  3. 重置顺序:一组 Loader 的执行顺序默认是从右到左执行,通过 enforce 选项可以让其中一个 Loader 的执行顺序放到最前或者最后。

下面来通过一个例子来说明具体使用方法:

  1. module: {
  2. rules: [
  3. {
  4. // 命中 JavaScript 文件
  5. test: /\.js$/,
  6. // 用 babel-loader 转换 JavaScript 文件
  7. // ?cacheDirectory 表示传给 babel-loader 的参数,用于缓存 babel 编译结果加快重新编译速度
  8. use: ['babel-loader?cacheDirectory'],
  9. // 只命中src目录里的js文件,加快 Webpack 搜索速度
  10. include: path.resolve(__dirname, 'src')
  11. },
  12. {
  13. // 命中 SCSS 文件
  14. test: /\.scss$/,
  15. // 使用一组 Loader 去处理 SCSS 文件。
  16. // 处理顺序为从后到前,即先交给 sass-loader 处理,再把结果交给 css-loader 最后再给 style-loader。
  17. use: ['style-loader', 'css-loader', 'sass-loader'],
  18. // 排除 node_modules 目录下的文件
  19. exclude: path.resolve(__dirname, 'node_modules'),
  20. },
  21. {
  22. // 对非文本文件采用 file-loader 加载
  23. test: /\.(gif|png|jpe?g|eot|woff|ttf|svg|pdf)$/,
  24. use: ['file-loader'],
  25. },
  26. ]
  27. }

在 Loader 需要传入很多参数时,你还可以通过一个 Object 来描述,例如在上面的 babel-loader 配置中有如下代码:

  1. use: [
  2. {
  3. loader:'babel-loader',
  4. options:{
  5. cacheDirectory:true,
  6. },
  7. // enforce:'post' 的含义是把该 Loader 的执行顺序放到最后
  8. // enforce 的值还可以是 pre,代表把 Loader 的执行顺序放到最前面
  9. enforce:'post'
  10. },
  11. // 省略其它 Loader
  12. ]

上面的例子中 test include exclude 这三个命中文件的配置项只传入了一个字符串或正则,其实它们还都支持数组类型,使用如下:

  1. {
  2. test:[
  3. /\.jsx?$/,
  4. /\.tsx?$/
  5. ],
  6. include:[
  7. path.resolve(__dirname, 'src'),
  8. path.resolve(__dirname, 'tests'),
  9. ],
  10. exclude:[
  11. path.resolve(__dirname, 'node_modules'),
  12. path.resolve(__dirname, 'bower_modules'),
  13. ]
  14. }

数组里的每项之间是或的关系,即文件路径符合数组中的任何一个条件就会被命中。

noParse

noParse 配置项可以让 Webpack 忽略对部分没采用模块化的文件的递归解析和处理,这样做的好处是能提高构建性能。 原因是一些库例如 jQuery 、ChartJS 它们庞大又没有采用模块化标准,让 Webpack 去解析这些文件耗时又没有意义。

noParse 是可选配置项,类型需要是 RegExp[RegExp]function 其中一个。

例如想要忽略掉 jQuery 、ChartJS,可以使用如下代码:

  1. // 使用正则表达式
  2. noParse: /jquery|chartjs/
  3.  
  4. // 使用函数,从 Webpack 3.0.0 开始支持
  5. noParse: (content)=> {
  6. // content 代表一个模块的文件路径
  7. // 返回 true or false
  8. return /jquery|chartjs/.test(content);
  9. }

注意被忽略掉的文件里不应该包含 import 、 require 、 define 等模块化语句,不然会导致构建出的代码中包含无法在浏览器环境下执行的模块化语句。

parser

因为 Webpack 是以模块化的 JavaScript 文件为入口,所以内置了对模块化 JavaScript 的解析功能,支持 AMD、CommonJS、SystemJS、ES6。 parser 属性可以更细粒度的配置哪些模块语法要解析哪些不解析,和 noParse 配置项的区别在于 parser 可以精确到语法层面, 而  noParse  只能控制哪些文件不被解析。 parser 使用如下:

  1. module: {
  2. rules: [
  3. {
  4. test: /\.js$/,
  5. use: ['babel-loader'],
  6. parser: {
  7. amd: false, // 禁用 AMD
  8. commonjs: false, // 禁用 CommonJS
  9. system: false, // 禁用 SystemJS
  10. harmony: false, // 禁用 ES6 import/export
  11. requireInclude: false, // 禁用 require.include
  12. requireEnsure: false, // 禁用 require.ensure
  13. requireContext: false, // 禁用 require.context
  14. browserify: false, // 禁用 browserify
  15. requireJs: false, // 禁用 requirejs
  16. }
  17. },
  18. ]
  19. }

webpack学习笔记--配置module的更多相关文章

  1. webpack学习笔记--配置总结

    从前面的配置看来选项很多,Webpack 内置了很多功能. 你不必都记住它们,只需要大概明白 Webpack 原理和核心概念去判断选项大致属于哪个大模块下,再去查详细的使用文档. 通常你可用如下经验去 ...

  2. webpack学习笔记--配置plugins

     Plugin Plugin 用于扩展 Webpack 功能,各种各样的 Plugin 几乎让 Webpack 可以做任何构建相关的事情. 配置 Plugin Plugin 的配置很简单, plugi ...

  3. webpack学习笔记--配置output

    Output output  配置如何输出最终想要的代码. output  是一个  object ,里面包含一系列配置项,下面分别介绍它们. filename output.filename  配置 ...

  4. webpack学习笔记--配置entry

     Entry entry 是配置模块的入口,可抽象成输入,Webpack 执行构建的第一步将从入口开始搜寻及递归解析出所有入口依赖的模块. entry  配置是必填的,若不填则将导致 Webpack ...

  5. webpack学习笔记--配置devServer

    devServer 1-6 使用DevServer 介绍过用来提高开发效率的 DevServer ,它提供了一些配置项可以改变 DevServer 的默认行为. 要配置 DevServer ,除了在配 ...

  6. webpack学习笔记--配置resolve

    Resolve Webpack 在启动后会从配置的入口模块出发找出所有依赖的模块,Resolve 配置 Webpack 如何寻找模块所对应的文件. Webpack 内置 JavaScript 模块化语 ...

  7. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  8. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  9. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

随机推荐

  1. H5混合开发app常用代码

    1.Android与H5互调可以让我们的实现混合开发,至于混合开发就是在一个App中内嵌一个轻量级的浏览器(高性能webkit内核浏览器),一部分原生的功能改为Html 5来开发.然后这个浏览器又封装 ...

  2. Git学习笔记03-工作区和暂存区

    Git和其他版本控制工具不同的地方就是有暂存区的概念 工作区(Working Directory) 就是在电脑界面上能够看到的目录 版本库(Repository) 工作区下面有个一个.git文件夹,也 ...

  3. Python3学习笔记28-HtmlTestRunner

    HtmlTestRunner是unittest模块下的一个拓展,用来生成测试报告.原生的可以自己找下下载地址,原生的看着比较丑.这次使用的是经过一些大佬优化之后的.具体GitHub地址:https:/ ...

  4. HDU 3333 Turing Tree 离线 线段树/树状数组 区间求和单点修改

    题意: 给一个数列,一些询问,问你$[l,r]$之间不同的数字之和 题解: 11年多校的题,现在属于"人尽皆知傻逼题" 核心思想在于: 对于一个询问$[x,R]$ 无论$x$是什么 ...

  5. 增加一台web机注意事项

    2017年4月18日 15:23:57 星期二 增加一台web机时, 先不要挂载进lb 1. 需要将此机器的ip加入到其它服务的白名单内: 数据库, 缓存, 第三方接口等 2. 绑定hosts, 点点 ...

  6. how to get address of member function

    see:http://www.cplusplus.com/forum/general/136410/ & http://stackoverflow.com/questions/8121320/ ...

  7. Go 常见严格格式汇总(struct,func...)不定期更新!

    1 引言 Golang对格式有着较为严格的规定,例如方法大括号一定要放在方法名后,否则编译不过:变量(常量除外)未使用,也编译不过等等 2 例子 2.1 struct type person stru ...

  8. SpringCloud的版本

    Spring Cloud 项目目前仍然是快速迭代期,版本变化很快.这里整理一下版本相关的东西,备忘一下. 大版本 版本号规则 Spring Cloud并没有熟悉的数字版本号,而是对应一个开发代号. C ...

  9. auth模块(登录验证)

    settings:'django.contrib.auth.middleware.AuthenticationMiddleware',#这个是认证的中间件,认证成功的话,就可以把这个用户user封装到 ...

  10. LNMP环境部署

    说明: 操作系统:CentOS 5.6 32位 准备篇: 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接服务器 二.配置防火墙,开启80端口.3306端口 vi /etc/sysconf ...