| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 11 Webpack中的配置-Module -> 正文阅读 |
|
[JavaScript知识库]11 Webpack中的配置-Module |
ModuleWebpack的构建就是从入口文件开始对项目中所涉及到的多类型模块进行处理,其处理是按照一定规则进行的,Module选型就是告诉Webpack如何处理项目中不同类型的模块。 NoParseWebpack会对项目中所涉及到的模块进行解析和编译,这里的模块通常是按照某种模块化标准生成的,如果项目中所依赖的模块或者第三方库是没有采用模块化的,例如JQuery,Loadsh等等。那么Webpack解析和编译这些模块是没有任何意义的,反而会增加构建时间,降低构建效率。 通过对noParse进行配置,就可以让Webpack取消对相关Library的处理:
这里使用正则匹配相关Lbrary,当Webpack遇到这些library时候,就会避开对该library的解析和处理。noParser还可以配置成函数,实现更精细化的配置:
值得注意的是,忽略的模块文件中不应该含有 import, require, define 这些模块化相关语句的调用,或任何其他导入机制,不然浏览器是无法直接运行相关模块化语句。 RulesWebpack默认能够识别处理的模块是以.js和.json为文件后缀名的模块。对其他类型的模块解析和编译需要在Rules中配置相关的Loader。比如使用Babel-loader去转换ES6,Css-loader去处理Css代码等等。 Rules规定了相关模块的读取和解析规则,通常用于配置Loader。Rules的类型是一个数组,所以可以在Rules中进行多种模块读取和解析规则的配置。配置一项Rules时大致可以分为以下三个步骤来进行:
例如对于使用Less所编写的样式模块,可以采用如下配置,去解析编译:
Parser使用Parser可以使相关Loader对不同类型的文件进行更精细化的处理。
然而,一些解析器(parser)插件可能不光只接收一个布尔值:
本章节提供案例源码下载:https://gitee.com/mvc_ydb/webpack/blob/master/module.zip ResolveModule规定了如何处理项目中涉及到的模块,侧重的是解析和编译过程,而Resolve规定了项目中的涉及到的模块路径如何被解析,侧重的是模块使用路径相关过程。 Webpack对Resolve提供默认值,但是在不同项目需求中还是可能会修改一些解析的细节。 Alias在项目中引入相关模块会使用大量的import或require这些模块化引入语句,有的时候所引入的模块可能有多个层级,导致其引入路径非常长。使用Alias可以给import或require引入的模块创建引用路径的映射,在项目代码中方便相关的模块引入:
这里使用Utils来作为./src/utils/的别名,只需所示方式即可引入相关模块:import {…} from ‘Utils’;
MainFields很多模块会编写多份代码来在不同环境下使用,模块的包信息文件package.json中记录来模块在各种环境下的入口文件的地址。当从 npm 包中导入这类模块时(例如,import * as Module from “Render”),MainFields决定使用package.json中的哪个字段导入模块。根据 Webpack配置中指定的target不同,默认值也会有所不同。假如Render模块对应的package.json中关于入口文件的声明代码描述如下:
module表示Node.js环境使用的代码入口文件,main表示采用ES5语法的代码入口文件,jsnext:main表示采用ES6语法的代码入口文件。Webpack会根据MainFields的配置决定优先采用哪份代码。 给target设置不同的值,会给MainFields赋予不同的默认值:
想优先使用采用ES6语法编写的代码,则可所示方式配置即可:mainFields: [“jsnext:main”, “main”,…]。 Extensions项目中书写相关模块的引入语句的时候,可以省略模块文件的后缀名称:import {getSecond} from ‘date’;在这里引入date模块的时候是没有添加文件后缀的,在构建过程中Webpack会自动带上后缀去尝试访问文件是否存在。Extensions用于配置可能用到的后缀名列表,其默认值为:extensions: [‘js’,‘json’]。 当你使用TypeScript开发你的项目的时候,希望Webpack优先使用项目下的TypeScript文件:
构建的时候,Webpack对于没有带文件后缀的模块引入的时候,就会优先使用.ts文件后缀去寻找对应的文件是否存在,不存在的话,使用.js文件后缀在去寻找,如果还是没有找到,就会使用.json文件后缀去寻找。当Extensions中所有的文件后缀都没有匹配到的时候,那么Webpack会抛出相关的错误,此次构建失败。根据项目需求,合理设置extensions可以加速构建。 ModulesModules告诉了Webpack解析模块时应该搜索的目录。默认值为modules: [“node_modules”],表示通过Npm下载的模块在其被进引入使用的时候,Webpack就会去node_modules中寻找,如果当前目录下的node_modules没有找到,就会父级目录下的node_modules中去寻找,以此类推。当确定只在当前目录下的node_modules中寻找的时候,可以做如下配置:
来减少搜索时间。 如果项目需要使用本地编写的模块,比如编写的UI模块:
可做如下配置,简化模块引入语句:
引入代码修改为:
Webpack会优先去MyUI文件目录去寻找,没有找到再去node_modules文件目录下去寻找。 EnforceExtensionEnforceExtension表示引入文件的时候是否需要加上文件后缀名,默认值为false,如果设置为true,则引入文件的时候必须要加上文件后缀名。 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:55:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |