靜態資源前端加載器,用來分析頁面中使用的
和依賴的
資源(js或css), 並將這些資源作必定的優化後插入頁面中。如把零散的文件合併。css
此插件作前端硬加載,適用於純前端項目,不適用有後端 loader 的項目。由於不識別模板語言,對於資源的分析和收集,比較的粗暴!!!html
默認會把頁面中用到的樣式插入在 header 中,腳本插入在 body 底部。若是想修改,請在頁面本身插入<!--SCRIPT_PLACEHOLDER-->
和 <!--STYLE_PLACEHOLDER-->
佔位符來控制位置。前端
此插件會收集全部的資源,若是但願某個資源不被收集,請在資源結尾處如 </script>
後面加上 <!--ignore-->
註釋.git
<script src="lib.js"></script><!--ignore-->
注意:被 ignore 的資源,不會被修改位置,同時也不會參與 allInOne 合併。github
支持全局安裝和局部安裝,根據本身的需求來定。shell
npm install fis3-postpackager-loader
fis.match('::packager', { postpackager: fis.plugin('loader', { allInOne: true }) });
默認 loader 只會以 html
的方式處理後綴爲 .html
的文件,若是但願其餘後綴也以 html
的方式去處理,請設置 loaderLang
屬性。npm
fis.match('*.md', { loaderLang: 'html' });
若是你真的很關心的話,如下詳細的流程處理介紹。後端
先假定全部優化功能全開,處理流程以下:markdown
<!--SCRIPT_PLACEHOLDER-->
到 </body>
前面,若是頁面裏面沒有這個註釋塊的話。<!--STYLE_PLACEHOLDER-->
到 </head>
前面,若是頁面沒有這個註釋的話。<script>
帶有 data-loader 屬性的或者資源名爲[mod.js, require.js, require.js]的資源找出來,若是有的話。把找到的 js 加入隊列,而且在該 <script>
後面加入 <!--RESOURCEMAP_PLACEHOLDER-->
註釋塊,若是頁面裏面沒有這個註釋的話。<script>
帶有 data-framework 屬性的資源找出來。把找到的 js 加入隊列。<script>
、 <link>
和 <style>
把蒐集到的資源加入隊列。<!--SCRIPT_PLACEHOLDER-->
、 <!--STYLE_PLACEHOLDER-->
和 <!--RESOURCEMAP_PLACEHOLDER-->
註釋塊。那麼 js 的輸出順序就是:帶 data-loader
的js,帶 resource map 信息的js, 帶 data-framework
的js,依賴中的 js, 頁面中其餘 js.異步
也就是說,若是你發現資源的加載順序不符合你的預期時,請加適當的屬性來調整資源級別。
分兩種方式指定依賴:
經過 fis 中的註釋指定依賴。
<!--@require "xxx.js"-->
更多用法,請查看聲明依賴
經過 js 語句指定依賴。
require('./main');
表示此代碼所在的文件,依賴當前目錄下面的 main.js 文件。
另外依賴又分兩種性質,以上都是同步依賴,還有一種異步依賴。
require(['./main']);
同步js 是頁面加載時加載,而異步js 依賴則是運行時加載,能知足按需加載的需求。
fis 中對依賴的js 加載,尤爲是異步 js,須要一個 js loader。好比 mod.js 是一個 loader, require.js 也是一種 loader。
當有異步依賴的時候,爲了讓 loader 知道文件所在位置,因此須要須要 resourcemap 信息。
此插件能生成兩類 resourcemap.
給 mod.js 用的,格式以下:
require.resourcemap({
res: {...}, pkg: {...} })
給 require.js amd loader 用的,格式以下:
require.config({
paths: { ... } })
scriptPlaceHolder
默認 <!--SCRIPT_PLACEHOLDER-->
stylePlaceHolder
默認 <!--STYLE_PLACEHOLDER-->
resourcePlaceHolder
默認<!--RESOURCEMAP_PLACEHOLDER-->
resourceType
默認 'auto', 可選 'mod'
、'amd'
。allInOne
默認 false, 配置是否合併零碎資源。
allInOne 接收對象配置項。
css
all in one 打包後, css 文件的路徑規則。默認爲 pkg/${filepath}_aio.css
js
all in one 打包後, js 文件的路徑規則。默認爲 pkg/${filepath}_aio.js
includeAsyncs
默認爲 false。all in one 打包,是不包含異步依賴的,不過能夠經過把此屬性設置成 true,包含異步依賴。ignore
默認爲空。若是不但願部分文件被 all in one 打包,請設置 ignore 清單。processor
默認爲 {'.html': 'html'}
, 即支持後綴是 .html 的文件,若是要支持其餘後綴,請在此擴展。
fis.match('::package', { postpackager: fis.plugin('loader', { processor: { '.html': 'html', // 支持 markdown 文檔 '.md': 'html' } }) })
obtainScript
是否收集 <script>
內容。(非頁面依賴部分)obtainStyle
是否收集 <style>
和 <link>
內容。(非頁面依賴部分)useInlineMap
是否將 sourcemap 做爲內嵌腳本輸出。resoucemap
默認爲 /pkg/${filepath}_map.js
當 useInLineMap
爲 false
的時候有效,用來控制 resourcemap 生成位置。include
默認生成的 sourcemap 只會包含異步依賴的 js, 若是想把一批模塊化的 js 加入到 sourcemap 中,請參考一下配置:
fis.match('::package', { postpackager: fis.plugin('loader', { include: '/widget/a/**.js' }) }) fis.match('::package', { postpackager: fis.plugin('loader', { include: [ '/widget/**.js', '!/widget/a/**.js' ] }) })