最近负责的Weex项目涉及到一些构建上的问题,需要通过自定义webpack的loader去实现,于是学习了一下这方面的知识,写一篇文章做个总结,以免遗忘。
webpack想必前端圈的人都知道了,大多数人也都或多或少的用过。简单的说就是它能够加载资源文件,并对这些文件进行一些处理,诸如编译、压缩等,最终一起打包到指定的文件中。可以说,它作为一个打包工具,在前端工程化浪潮中,起到了中流砥柱的作用。
那webpack其中非常重要的一环就是,能够对加载的资源文件,进行一些处理。比如把less、sass文件编译成css文件,负责这个处理过程的,就是webpack的loader。
什么是loader
我们都知道webpack作为当下最火的一个前端构建工具,具有很多很实用的功能,loader就是其中之一。说的通俗一点,loader就是用于对模块的源码进行转换。对于做Android的同学,大家可以把它想象成gradle中的transform task。
loader怎么用
在平时的开发过程中,loader的使用也是非常常见的,我们可以在工程的webpack.config.js中定义:
module: { rules: [ { test: /\.css$/, use: [ 'vue-style-loader', 'css-loader' ], }, { test: /\.vue$/, loader: 'vue-loader', options: { loaders: { } // other vue-loader options go here } }, { test: /\.(png|jpg|gif|svg)$/, loader: 'file-loader', options: { name: '[name].[ext]"color: #ff0000">如何自定义loader
有了上面的经验,我们该如何自定义一个loader呢?其实也是非常简单的。
首先我们创建一个js文件,就取名叫test-loader吧。
var loaderUtils = require('loader-utils'); module.exports = function(source) { console.log("start process code..."); var options = loaderUtils.getOptions(this) || {}; if(options !== {}) { var replaceMap = options["replaceMap"]; for(var key in replaceMap) { console.log(source); source = source.replace(key, replaceMap[key]); console.log(source); } } return source; };这就是全部的代码了,其实一个loader内部就是一个node模块,代码的编写就和平时写node一样就ok了。
test-loader的逻辑就是获取到设置的option,并且做一个文本的替换。
假设我们还有2个js文件,分别是test.js和index.js
test.js
const str = 'test is loaded'; module.exports = str;index.js
const test = require('./src/test'); console.log(test);然后我们在webpack.config.js中加入我们自己的test-loader。
{ test: /\.js$/, loader: 'test-loader', exclude: /node_modules/, options: { replaceMap: { "loaded": "yeah" } } }其中options中,我们将“loaded”字符串替换成“yeah”。
但是我们的loader并没有上传到npm中,所以我们还需要在webpack.config.js中加入下面这段代码:
resolveLoader: { modules: [path.join(__dirname, './src/loaders'), 'node_modules'] }用于加载本地loader。
这样我们最终构建出来的产物中,所有的“loaded”字符串就会被替换成“yeah”了。
小结
这篇文章非常浅显,主要就是讲了一下loader的使用方式,其实我们熟知的很多loader都是这么做的,只不过是业务逻辑上的复杂程度不同而已,大家也可以自己试试看。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。