webpack配置别名alias出现的错误匹配
来源:互联网 发布:暗黑3武器白字算法 编辑:程序博客网 时间:2024/05/29 16:45
@(webpack)
webpack是一款功能强大的前端构建工具,不仅仅是针对js,它也可通过各种loader来构建相关的www.lahfnj.com less,html,image等各种资源,将webpack配合流程制定工具gulp结合起来,则更为方便的自定义工作流程。
[TOC]
webpack的alias匹配问题初现
在webpack.config.js中,通过设置resolve属性可以配置查找“commonJS/AMD模块/www.lahfnj.com”的基路径,也可以设置搜索的模块后缀名,当然,最后一个就是我们要讲的别名alias设置。
跟踪问题
在模块开发过程中,我们可能会对可以复用的组件封装成一个可被git管控的模块,并在引用的过程中采用带版本号的方式引用,这就要求我们在webpack.config.js中添加相关alias www.lahfnj.com配置,如
...module.exports = { entry: { main: 'index.js' }, output: { path: 'build' filename: '[name].js' },//http://www.lahfnj.com resolve: { root: 'modules' alias: { 'mod/slider': '/path/mods/mod/slider/0.0.5', 'mod/footer': '/path/mods/mod/footer/0.0.2', 'mod/slider/0.0.3': '/path/mods/mod/slider/0.0.3', 'mod/header': '/path/mods/mod/header/0.0.1', 'mod/slider/0.0.1': '/path/mods/mod/slider/0.0.1' } }}
有一个简单的需求,即在index.js中,可这样引用:
var slider = require('mod/slider');var sliderV3 = require('mod/slider/0.0.3');var sliderV1 = require('mod/slider/0.0.1');
结果和我们预想的会有不同,webpack的别名处理逻辑会使这三个变量的引用都为 slider这个变量所对应的模块,要想解决这种情况,只能深入源码。
深入源码之ModuleAliasPlugin
先贴上部分源码:
var aliasMap = this.aliasMap; resolver.plugin("module", function(request, callback) { var fs = this.fileSystem; var keys = Object.keys(aliasMap); var i = 0;//lahfnj.com (function next() { for(;i < keys.length; i++) { var aliasName = keys[i]; var onlyModule = /\$$/.test(aliasName); if(onlyModule) aliasName = aliasName.substr(0, aliasName.length-1); if((!onlyModule && request.request.indexOf(aliasName + "/") === 0) || request.request === aliasName) { var aliasValue = aliasMap[keys[i]]; if(request.request.indexOf(aliasValue + "/") !== 0 && request.request != aliasValue) { var newRequestStr = aliasValue + request.request.substr(aliasName.length); var newRequest = this.parse(newRequestStr); var obj = { path: request.path, request: newRequest.path, query: newRequest.query, directory: newRequest.directory };//www.lahfnj.com var newCallback = createInnerCallback(callback, callback, "aliased with mapping " + JSON.stringify(aliasName) + ": " + JSON.stringify(aliasValue) + " to " + newRequestStr); if(newRequest.module) return this.doResolve("module", obj, newCallback); if(newRequest.directory) return this.doResolve("directory", obj, newCallback); return this.doResolve(["file", "directory"], obj, newCallback); } } } return callback(); }.call(this));//www.lahfnj.com
这段简单的代码所做的就是针对别名做映射,获取到对应的模块。
之所以出现上节的问题,就是因为这句判断
if(request.request.indexOf(aliasValue + "/") !== 0 && request.request != aliasValue)//lahfnj.com/
webpack的作者貌似有些多此一举了,或者说是在我们的应用场景中并没有考虑到,所以仅仅针对这个判断进行修改就可以满足需求。修改非常简单,进行严格相等的判断:
if(request.request != aliasValue)
1 0
- webpack配置别名alias出现的错误匹配
- webpack中alias别名配置
- Day1 - alias 配置指令的别名
- tomcat 配置别名alias
- Mac 配置mysql 别名 alias
- Nginx目录别名(Alias)支持PHP的配置
- lldb的alias别名功能
- linux别名alias的设置
- 命名空间的别名Alias
- vue设置webpack文件别名+配置路由的默认class
- mac下.gitconfig配置别名alias
- Ubuntu使用alias配置命令别名
- Apache httpd 2.4 alias 别名配置
- Alias 别名
- 别名--alias
- webpack打包时出现的错误
- 七.Sql server alias(别名)的用法
- alias 给你的linux命令设置别名
- 关于清除Android Studio中清除代理设置
- NSURLSession学习记录
- [UE4]UMG、HUI、Slate之间的区别
- Yii2安装教程
- pyhton 实例6 格式化输出
- webpack配置别名alias出现的错误匹配
- 文章标题
- if 语句排序
- list中去重复数据的
- Html5添加移动触摸的网页版PDF格式文件阅读器插件教程
- React 入门实例教程
- 技术类面试题——智力题
- halcon学习备忘二(图像相减算子)
- Elasticsearch