原文地址css
Loaders是應用於你app資源文件上的轉換器。它們是執行在node端的函數,它們將源文件做爲參數並將轉換結果做爲新的資源返回。
例如,你可使用loaders讓web pack加載CoffeeScript或是JSX。html
Loaders能夠被鏈式調用。它們像管道(pipeline)同樣處理資源。只有最後一個loader返回JavaScript格式的代碼,而其餘的loader能夠返回任意格式並將其傳給下一個loadernode
Loaders既能同步執行也能異步執行webpack
Loaders運行在 node.js 環境中,因此能夠作任何可能的事情git
Loaders接受query參數,這意味着咱們能夠把配置項傳給loadergithub
Loaders在配置文件中能夠被綁定到不一樣的文件,經過擴展名或正則表達式web
Loaders可經過nam發佈或安裝正則表達式
除了能夠在package.son
文件中配置loader,一般模塊也做爲能夠loader。npm
Loader 能夠訪問配置json
插件賦予loaders更多特性
Loaders可用來分發文件(詳見)
Loaders的解析與模塊的解析一致,每一個loader都是運行在JavaScript中的腳本並一般返回一個函數。咱們一般用nam管理loaders模塊,但在你的app也可使用本身寫的文件充當模塊。
並不是硬性要求,只是咱們習慣上使用XXX-loader
做爲loaders的名稱。其中XXX
是上下文名稱,例如json-loader
。
你能夠經過全名引用一個loader(如json-loader), 也可使用簡寫(如json)。
loader名稱的習慣用法與優先級規則由webpack的配置API: resolveLoader.moduleTemplates 定義。
Loader名稱的習慣用法是頗有用的,特別是在使用require()語句引用Loader時。參見下述用法。
發佈在npm上的loaders你可使用:
$ npm install xxx-loader --save
或
$ npm install xxx-loader --save-dev
安裝。
在app中使用loaders的方法也是多種多樣的:
直接使用require語句引用
在配置文件中配置configuration
在CLI(命令行)中配置
注意:在任何狀況下都因避免使用此方法,若是你想要讓你的腳本不依賴運行環境(node或瀏覽器)。使用配置去聲明loaders(參見下述配置)。
請儘可能使用require語法聲明(或define,require.ensure).使用!
做爲loaders與資源之間的分隔。被引用部分的相對路徑是當前目錄。
模塊能夠串聯,經過使用!
符號組織。
require("./loader!./dir/file.txt"); // => 使用在當前目錄下的"loader.js"文件去處理在文件夾"dir"中"file.txt"文件 require("jade!./template.jade"); // => 使用"jade-loader" (經過nam安裝在"node_modules")去處理文件"template.jade",若是配置中對文件還有別的處理也會被應用。 require("!style!css!less!bootstrap/less/bootstrap.less"); // => "bootstrap"目錄下的"less"目錄下的"bootstrap.less"文件將會被"less-loader"處理後轉給"css-loader"處理以後再轉給"style-loader"處理,若是配置中對文件還有別的處理將不會被應用。
在配置文件中經過正則綁定loaders:
{ module: { loaders: [ { test: /\.jade$/, loader: "jade" }, // => "jade" loader處理".jade"文件 { test: /\.css$/, loader: "style!css" }, // => "style"與"css" loader 處理 ".css" 文件 // 另外一種語法: { test: /\.css$/, loaders: ["style", "css"] }, ] } }
經過命令行擴展綁定loaders:
$ webpack --module-bind jade --module-bind 'css=style!css'
這裏使用「jade」 loader 來處理「.jade」文件,使用「style」 loader與「css」 loader 處理「.css」文件。
Loader能夠經過查詢字符串來傳遞查詢參數(像url中同樣)。經過使用?
將查詢字符串附加在loader後,如url-loader?mimetype=image/png。
注意:查詢字符串的格式取決於具體loader。詳見具體loader文檔.大多數loader接受參數格式(?key=value&key2=value2)也接受JSON對象(?{"key":"value","key2":"value2"})。
require("url-loader?mimetype=image/png!./file.png");
{ test: /\.png$/, loader: "url-loader?mimetype=image/png" } or { test: /\.png$/, loader: "url-loader", query: { mimetype: "image/png" } }
webpack --module-bind "png=url-loader?mimetype=image/png"