webpack--概念7--模块解析

1:resolver

resolver是一个库,用于帮助找到模块的绝对路径;他帮助webpack找到bundle中需要引入的模块代码;这些代码包含在每个require/import语句中,当打包模块时,webpack使用enhanced-resolve来解析文件路径;

2:webpack中的3种文件路径解析

1:绝对路径

import "/home/me/file";

import "C:\\Users\\me\\file";

2:相对路径,会添加此上下文路径以产生模块的愧对路径

import "../src/file1";
import "./file2";

3:模块路径,

import "module";
import "module/lib/file";

模块将在resolve.module中指定的所有目录内搜索,你可以替换初始模块路径,此替换路径听过使用resolve.alias配置选项来创建一个别名;一旦根据上述规则解析路径后,解析器(resolve)将检查路径是否指向文件或者目录;
(1)如果路径指向一个文件,
A:如果路径具有文件扩展名(称为文件的后缀名,是操作系统用来标志文件类型的一种机制),则直接将文件打包
B:否则,将使用[ resolve.extensions ]选项作为文件扩展名来解析。这个选项告诉解析器在解析中能够接受哪些扩展名(例如 .js .jsx)
(2)如果文件指向一个文件夹,则采取以下步骤找到具有正确扩展名的正确文件
A:如果文件中包含package.json文件,则按照顺序查找 resolve.mainFields配置选项中指定的字段,并且package.json中的第一个这样的字段确定文件路径
B:如果package.json文件不存在或者pack.json文件中的main字段没有返回一个有效路径,则按照顺序查找 resolve.mainFiles配置选项中指定的文件名,看是否能在import/require目录下匹配到一个存在的文件名
C:文件扩展名通过 resolve.extensions选项采用类似的方法进行解析;

3:loader解析

loader解析遵循与文件解析器指定的规则相同,但是 resolveLoader配置选项可以用来为loader提供独立的解析规则;

4:缓存

每个文件系统访问都被缓存,以便更快触发对同一文件的多个并行或者穿行请求,在观察模式下,只有修改过的文件会从缓存中清除,吐过关闭观察者模式,在每次编译前清理缓存;

ES2015种的import和export语句已经被标准化,虽然大多数浏览器还无法支持它们,但是webpack却能够提供开箱即用版的支持;
事实上,webpack在幕后将代码转译,以便旧的浏览器能够执行。除了import和require,webpack还能够很好的支持多种其他模块语法;
注意webpack不会更改代码中除import和export语句以外的部分;如果你在使用其他ES2015特性,请确保通过webpack的loader系统,使用一个像是babel或buble的转译器;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值