微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

20170622-webpack之loader篇

less-loader

处理代码中引入的less文件,通过对应的less模块,将less转变为css

css-loader

通过css-loader,使得在css中能够使用@importurl(...)的方式实现require()功能

style-loader

style-loader将所有计算后的样式加入页面中(将样式表嵌入webpack打包后的JS文件中即css和js会被打包到同一个文件中)

babel-loader

处理jsx文件,结合babel对jsx中的es6语法、jsx语法进行处理转换

file-loader

{
    test: /\.(eot|svg|ttf|woff2?)$/,use: ['file-loader?name=assets.fonts/[name].[ext']
}

url-loader

对于比较小(url-loader的查询参数进行了限制)的图片,可以将其转换为base64形式,如果图片大小超过限制,那么webpack就会使用file-loader去处理文件,并且所有的查询参数都会传递给file-loader,file-loader会在查询字符串参数中指定的路径生成对应的文件

extract-loader

Extract text from bundle into a file.从打包后的js文件提取出特定的内容一个新的文件中,需要配合file-loader使用,由file-loader指定提取文件的路径

html-loader

提取html文件,使其变成js代码。这个loader需要结合extract-loader和file-loader一起使用

{
    test: /\.html$/,use: [
        'file-loader?name=[name].html','extract-loader','html-loader'
    ]
}

上面的代码是webpack的一段配置代码,具体的作用是:首先经过html-loader:提取HTML代码生成对应的js代码;然后经过extract-loader:抽取出这部分HTML代码;最后经过file-loader,在file-loader的查询字符串参数指定的位置生成新的html文件

  • 为什么一个html文件要经过上述loader的处理?

在开发过程中,我们将所有的代码、资源放在一个路径下,当打包后,会生成一个打包文件夹,其中包含了打包后的代码以及所有资源文件(image、fonts)。webpack在打包过程中会将代码中资源的原始路径替换成资源的新路径(在打包文件夹下资源的路径)。html中如果存在<img>元素,并且使用的本地图片,在打包后我们希望<img>元素的路径同样替换成对应资源的新路径,因此,需要经过上述loader的处理,当然在webpack.config.js文件entryoutput部分,同样得指定对应的html文件,如下所示

entry: {
    vendor: './src/vendor/index.js',// 将index.jsx和index.html文件打包到一起,在打包过程中webpack会将index.html依次经过html-loader、extract-loader、file-loader的处理
    xx: ['./src/xx/index.jsx','./src/xx/index.html']
  },output: {
    path: path.resolve(__dirname,'public'),publicPath: '/'
    filename: 'assets/js/[name].js',chunkFilename: 'assets/js/chunk.[id].js',}

..... 省略

{
    test: /\.html$/,'html-loader'
    ]
}

个人理解

webpack在打包项目的过程中,会将一些代码、资源(css、image、fonts)通过extract-loader、file-loader、ExtractTextPlugin等一些loader和插件打包/复制到新的路径中去,webpack会将代码中的旧路径替换成新路径。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...