以前的博文已經介紹了Loader的概念以及用法,webpack 能夠使用 loader 來預處理文件,這容許你打包除 JavaScript 以外的任何靜態資源, 甚至容許你直接在 JavaScript 模塊中 import CSS文件。css
在 src 目錄下新建 components 文件夾,新建 modal 組件:html
編寫代碼:webpack
<!--modal.ejs--> <div class="modal-parent"> <div class="modal-header"> <h3 class="modal-title"><%= title %></h3> </div> <div class="modal-body"> <%= content %> </div> <div class="modal-footer"> <%= footer %> </div> </div>
// modal.js import template from './modal.ejs' export default function modal () { return { name: 'modal', template: template } }
修改 main.js:web
import Modal from './components/modal/modal' const App = function () { let div = document.createElement('div') div.setAttribute('id', 'app') document.body.appendChild(div) let dom = document.getElementById('app') let modal = new Modal() dom.innerHTML = modal.template({ title: '標題', content: '內容', footer: '底部' }) } const app = new App()
此時執行 npm run build 會報錯 :npm
webpack 沒法解析 .ejs 文件,所以咱們須要安裝對應的 loader:瀏覽器
npm i ejs-loader -D
並修改 webpack.config.js 添加 module 屬性:app
module: { rules: [ { test: /.ejs$/, use: ['ejs-loader'] } ] }
再次執行 npm run build 就不會報錯了,打開 dist/index.html :dom
能夠看到咱們的 modal 組件已經成功渲染出來了。 svg
在 modal.css 中加入樣式代碼:ui
.modal-parent{ width: 500px; height: auto; border: 1px solid #ddd; border-radius: 10px; } .modal-title{ font-size: 20px; text-align: center; padding: 10px; margin: 0; } .modal-body{ border: 1px solid #ddd; border-left: 0; border-right: 0; padding: 10px; } .modal-footer{ padding: 10px; }
安裝 css-loader 和 style-loader:
npm i css-loader style-loader -D
修改webpack.config.js 中的 module.rules ,添加css-loader 和 style-loader:
module: { rules: [ { test: /.ejs$/, use: ['ejs-loader'] }, { test: /.css$/, use: [ 'style-loader', 'css-loader' ] } ] },
在 modal.js 中引入 modal.css:
import './modal.css'
再次執行 npm run build ,打開 dist/index.html:
CSS樣式已經經過 style 標籤添加到頁面上了;
在src目錄下建立 assets/img ,放入兩張圖片
給 modal 添加一個背景圖的樣式:
.modal-body{ border: 1px solid #ddd; border-left: 0; border-right: 0; padding: 10px; background: url("../../assets/img/bg.jpg"); color: #fff; height: 500px; }
因爲webpack沒法處理圖片資源,因此也要安裝對應的 loader
npm install --save-dev url-loader file-loader
在 webpack.config.js 中添加 loader
rules: [ { test: /.ejs$/, use: ['ejs-loader'] }, { test: /.css$/, use: [ 'style-loader', 'css-loader' ] }, { test: /.(jpg|jpeg|png|gif|svg)$/, use: 'url-loader' } ]
打包代碼以後,在瀏覽器打開 dist/index.html ,可見圖片已經顯示出來了:
仔細查看這張圖片能夠發現,它是經過 DataURL 加載出來的:
下面更改 url-loader 的配置,limit表示在文件大小低於指定值時,返回一個DataURL
{ test: /.(jpg|jpeg|png|gif|svg)$/, use: [ { loader: 'url-loader', options: { name: '[name]-[hash:5].[ext]', limit: 1024 } } ] }
再次打包後,圖片會以文件形式展現出來: