@frank-shaw
2017-02-13T15:58:03.000000Z
字数 2531
阅读 2004
javaScript
在 Webpack 当中, 所有的资源都被当作是模块, js, css, 图片等等..因此, Webpack 当中 js 可以引用 css, css 中可以嵌入图片 dataUrl。对应各种不同文件类型的资源, Webpack 有对应的模块 loader。比如 CSS用的是 css-loader, 其他还有很多:
http://webpack.github.io/docs/list-of-loaders.html
Loader可以理解为是资源和模块的转换器,它本身是一个函数,接受源文件作为参数,返回转换的结构。这样,我们就可以通过require来加载任何类型的模块或文件。最后即可实现webpack首页的展示
Loader的特性:
通常情况下,Loaders都会被命名为XXX-loader,比如json-loader。首先我们通过npm来安装具体的的loader:
npm install xxx-loader --save-dev
关于使用,有三种使用Loader的方法:
官方文档中并不建议采用此种方法。
基本的语法就是,通过分隔符!
来区分Loaders与resource。我们来看看栗子:
require("./loader!./dir/file.txt");
// => 使用文件"./loader.js"来转换 ./dir/file.txt
require("jade!./template.jade");
// => 使用 "jade-loader" (已经使用npm安装到程序中)来转换文件“./template.jade”
require("!style!css!less!bootstrap/less/bootstrap.less");
// => 文件"bootstrap/less/bootstrap.less" ("bootstrap"模块已经通过npm安装到程序中)首先经过less-loader的转换,继而链式输出给css-loader来转换,最后输出给style-loader来转换
值得注意的是,如果在链式操作的时候,是从右到左。
我们来看看如何在文件中操作:
{
module: {
loaders: [
{ test: /\.jade$/, loader: "jade" },
// => "jade" loader is used for ".jade" files
{ test: /\.css$/, loader: "style!css" },
// => "style" and "css" loader is used for ".css" files
// Alternative syntax:
{ test: /\.css$/, loaders: ["style", "css"] },
]
}
}
$ webpack --module-bind jade --module-bind 'css=style!css'
Loaders既然实际上是一个函数,那么自然可以携带有参数,只不过通过以上三种方法来携带参数需要类似于网络传输过程中的形式--借助?
分隔符来表示:
require("url-loader?mimetype=image/png!./file.png");
{ test: /\.png$/, loader: "url-loader?mimetype=image/png" }
webpack --module-bind "png=url-loader?mimetype=image/png"
当使用Loader已经基本将包生成的时候,那么你可能会使用插件来协助你做更多的后续处理。在webpack中,插件分为内置插件、第三方插件。一般情况下可以查找满足你的要求的第三方插件。
想要使用插件,那么需要现在配置文件中添加plugins:
var webpack = require('webpack')
module.exports = {
entry: './entry.js',
output: {
path: __dirname,
filename: 'bundle.js'
},
module: {
loaders: [
{test: /\.css$/, loader: 'style!css'}
]
},
plugins: [
//BannerPlugin是内置插件,作用是在输出文件的开头添加一些字符串
new webpack.BannerPlugin('This file is created by frank')
]
}
如果想要使用第三方插件,那么就需要使用npm来安装对应的插件:
//install
npm install component-webpack-plugin
//use
var ComponentPlugin = require("component-webpack-plugin");
module.exports = {
plugins:[
new ComponentPlugin()
]
}
一些常用的插件可以到下面的网站中查找:
http://webpack.github.io/docs/list-of-plugins.html
Loader处理单独的文件级别并且通常作用域包生成之前或生成过程中。
而插件则是处理包或者chunk级别,且通常是bundle生成的最后阶段。
参考文档:
1.http://webpack.github.io/docs/