loader定义: 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件
简单使用
module.exports = {
//...
module: {
rules: [
{
test: /\.js$/,
use: [
{
// loader 是导出为一个a函数的 node 模块。该函数在 loader 转换资源的时候调用
// 给定的函数将调用 loader api,并通过 this 上下文访问
loader: path.resolve('loader.js'),
options: {/* ... */}
}
]
}
]
}
};
回顾了loader的定义及简单使用后,我们再来分析一下实现loader的思路
基于上面分析的几点,我们开始动手
// 这个就是一个最简单loader,
// 如果我们的loader有依赖其它模块,也得以module的写法将在在顶部引入
import fs from 'fs';
export default function(source){
return source
}
我们发现上面直接使用了return,是因为是同步类的loader且返回的内容唯一,如果你希望你的loader支持链式调用,将结果返给下一个loader继续使用,这时候就需要用webpack提供的api
这里我们简单看一下this.callback的定义,一个可以同步或者异步调用的可以返回多个结果的函数。预期的参数是
this.callback(
err: Error | null,
content: string | Buffer,
sourceMap?: SourceMap,
meta?: any
)
// loader-utils 它提供了很多有用的工具
// 最常用的一个就是获取传入 loader 的 options
import { getOptions } from 'loader-utils';
export default function(source, other) {
const options = getOptions(this)
// do whatever you want
// ...
this.callback(null, source, other)
}
手写一个loader对没有研究过的听上去好像有点难,事实上, 掌握上面所介绍的内容及思想,就可以开始写一个简单的 Loader 了, 我们再来用简单的代码绥一下loader到底是什么?
// 首先loader它是一个node模块,这很好理解
export const lessTocss = function(source, other) {
// source 就是你即将要转换的文件源
// TODO
// 将转换好的文件源流转至一个管道
this.callback(null, source, other)
}
loader api中有几个好用的家伙这里就顺便带一下
下方贴上less-loader的源码,代码很简洁,结合上方我们所分析的,也很容易理解
import processResult from './processResult';
const render = pify(less.render.bind(less));
function lessLoader(source) {
const loaderContext = this;
const options = getOptions(loaderContext);
const done = loaderContext.async();
const isSync = typeof done !== 'function';
if (isSync) {
throw new Error(
'Synchronous compilation is not supported anymore. See https://github.com/webpack-contrib/less-loader/issues/84'
);
}
processResult(loaderContext, render(source, options));
}
webpack 在前端工程中随处可见,当前流行的 vue, react, weex 等解决方案都推崇 webpack 作为打包工具。前端工具云集的时代,这是你值得选择的之一。
webpack是前端工程构建的一套工具,为什么一个程序称之为一套呢,是因为webpack其实是npm的一个模块,使用起来的话,这期间还需要很多其它模块来进行支持,所以我称之为一套工具。
本文从一个小Demo开始,通过不断增加功能来说明webpack的基本配置,只针对新手。webpack基本的配置就可以熟悉了,会引入loader,配置loader选项,会设置alias,会用plugins差不多。
Plugins是webpack的基础,我们都知道webpage的plugin是基于事件机制工作的,这样最大的好处是易于扩展。讲解如果扩展内置插件和其他插件,以及我们常用的Plugins插件
webpack技巧的总结:进度汇报、压缩、复数文件打包、分离app文件与第三方库文件、资源映射、输出css文件、开发模式、分析包的大小、更小的react项目、更小的Lodash、引入文件夹中所有文件、清除extract-text-webpack-plugin日志。
Webpack 作为目前最流行的前端构建工具之一,在 vue/react 等 Framework 的生态圈中都占据重要地位。在开发现代 Web 应用的过程中,Webpack 和我们的开发过程和发布过程都息息相关,如何改善 Webpack 构建打包的性能也关系到我们开发和发布部署的效率。
新版 Webpack 中我们所做的每一个更新目的都在于此,为了当大家在使用 Webpack 的时候敏捷连续毫无顿挫感。 webpack 4 进行构建性能测试,得出的结果非常有趣。结果很惊人,构建时间降低了 60%-98%!
Webpack 是一个现代 JavaScript 应用程序的模块打包器 (module bundler) 。当 Webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块
Tobias Koppers是一位自由软件开发者,家住德国纽伦堡。他因写出webpack这个已有数百万开发者使用的开源软件而名噪一时。他目前专注于JavaScript和开源项目。以下是我对他个人的专访,希望对大家有所启发。
本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。比如antd-mobilenpm包的引入。在不做特殊处理的前提下,样式文件将会被转译成css module。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!