demo 代碼點此,開始以前,先作點準備工做。css
準備一個空文件夾,而後執行下列命令:html
npm init -y npm i -D webpack webpack-cli
而後建立一個 dist 目錄,並在裏面建立一個 indedx.html:webpack
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>webpack4 loader 打包靜態資源</title> </head> <body> <div id="root"></div> <!-- 這裏引入待會將要打包好的 JS 文件 --> <script src="./bundle.js"></script> </body> </html>
接着建立一個 src 目錄,在裏面建立一個 lib 文件夾,建立一個 until.js:git
// until.js export function $ (id) { return document.getElementById(id); } export function add (x, y) { return x + y; }
再建立 components 文件夾,再寫入幾個 js:github
// Content.js import { $ } from '../lib/until'; export default function Content () { let content = document.createElement('div'); content.innerText = 'content'; $('root').appendChild(content); } // Footer.js import { $ } from '../lib/until'; export default function Footer () { let footer = document.createElement('div'); footer.innerText = 'footer'; $('root').appendChild(footer); } // Header.js import { $ } from '../lib/until'; export default function Header () { let header = document.createElement('div'); header.innerText = 'header'; $('root').appendChild(header); }
在 src 下建立 index.js:web
import Header from './components/Header'; import Content from './components/Content'; import Footer from './components/Footer'; import { $ } from './lib/until'; Header(); Content(); Footer();
在根目錄下,建立 webpack.config.js:shell
const path = require('path'); module.exports = { // mode: 'production', mode: 'development', // 入口 // entry: './src/index.js', entry: { main: './src/index.js', }, // 出口 output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, }
而後在 package.json 中的 scripts 中加入:npm
"scripts": { ... + "bundle": "webpack" },
在終端運行npm run bundle
執行打包,而後訪問 /dist/index.html
便可。json
執行下列命令:瀏覽器
npm i -D url-loader
而後在 src 下建立 assets/images/ 文件夾,而後放入一張圖片便可:
/src/assets/images/webpack.jpg
而後修改 webpack.config.js:
const path = require('path'); module.exports = { // mode: 'production', mode: 'development', // 入口 // entry: './src/index.js', entry: { main: './src/index.js', }, + module: { + rules: [{ + // 打包圖片 + test: /\.(jpg|png|gif)$/, + use: { + // loader: 'file-loader', + loader: 'url-loader', + options: { + name: '[name]_[hash].[ext]', + outputPath: 'images/', + limit: 8192, + }, + }, + }, + }, // 出口 output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, }
再修改 index.js:
import Header from './components/Header'; import Content from './components/Content'; import Footer from './components/Footer'; + import webpack from './assets/images/webpack.jpg'; import { $ } from './lib/until'; Header(); Content(); Footer(); + let root = $('root'); + let img = new Image(); + img.src = webpack; + img.id = 'img'; + root.appendChild(img);
執行打包便可。
這裏僅配置 less,安裝 loader:
npm i -D less less-loader css-loader style-loader postcss-loader
在 src 下建立 index.less:
// index.less body { background-color: #ffffff; } #img { transform: translate(50px, 0); }
而後修改 webpack.config.js:
const path = require('path'); module.exports = { // mode: 'production', mode: 'development', // 入口 // entry: './src/index.js', entry: { main: './src/index.js', }, module: { rules: [{ // 打包圖片 test: /\.(jpg|png|gif)$/, use: { // loader: 'file-loader', loader: 'url-loader', options: { name: '[name]_[hash].[ext]', outputPath: 'images/', limit: 8192, }, }, }, + { + // 打包 css、less + test: /\.(css|less)$/, + use: [ + 'style-loader', + { + loader: 'css-loader', + options: { + importLoaders: 2, + } + }, + 'less-loader', + 'postcss-loader', + ], + }], }, // 出口 output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, }
再修改 index.js:
import Header from './components/Header'; import Content from './components/Content'; import Footer from './components/Footer'; import webpack from './assets/images/webpack.jpg'; import { $ } from './lib/until'; + import './index.less'; Header(); Content(); Footer(); let root = $('root'); let img = new Image(); img.src = webpack; img.id = 'img'; root.appendChild(img);
安裝 autoprefixer 爲 css 自動添加瀏覽器前綴:
npm i -D autoprefixer
而後在根目錄建立 postcss.config.js:
module.exports = { plugins: { 'autoprefixer': { overrideBrowserslist: [ "Android 4.1", "iOS 7.1", "Chrome > 31", "ff > 31", "ie >= 8" ] }, } }
接着打包便可。
安裝 loader:
npm i -D file-loader
修改 webpack.config.js:
const path = require('path'); module.exports = { // mode: 'production', mode: 'development', // 入口 // entry: './src/index.js', entry: { main: './src/index.js', }, module: { rules: [{ // 打包圖片 test: /\.(jpg|png|gif)$/, use: { // loader: 'file-loader', loader: 'url-loader', options: { name: '[name]_[hash].[ext]', outputPath: 'images/', limit: 8192, }, }, }, { // 打包 css、less test: /\.(css|less)$/, use: [ 'style-loader', { loader: 'css-loader', options: { importLoaders: 2, // css 模塊化 // modules: true, } }, 'less-loader', 'postcss-loader', ], }, { + // 打包字體文件 + test: /\.(eot|ttf|svg|woff|woff2)$/, + use: { + loader: 'file-loader', + options: { + outputPath: 'font/', + } + }, + }], }, // 出口 output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, }
而後建立文件夾 /src/assets/font/,在裏面放一下字體文件,我放的是圖標的字體文件。
// 這些是我放入的字體文件 iconfont.eot iconfont.svg iconfont.ttf iconfont.woff iconfont.woff2
修改 index.js:
import Header from './components/Header'; import Content from './components/Content'; import Footer from './components/Footer'; import webpack from './assets/images/webpack.jpg'; import { $ } from './lib/until'; import './index.less'; Header(); Content(); Footer(); let root = $('root'); let img = new Image(); img.src = webpack; img.id = 'img'; root.appendChild(img); + let div = document.createElement('div'); + div.classList.add('iconfont', 'icon-chenggong'); + root.appendChild(div);
再修改 index.less:
body { background-color: #ffffff; } #img { transform: translate(50px, 0); } + @font-face {font-family: "iconfont"; + src: url('./assets/font/iconfont.eot?t=1563786008234'); + src: url('./assets/font/iconfont.eot?t=1563786008234#iefix') format('embedded-opentype'), + url('data:application/x-font-woff2;charset=utf-8;base64,') format('woff2'), + url('./assets/font/iconfont.woff?t=1563786008234') format('woff'), + url('./assets/font/iconfont.ttf?t=1563786008234') format('truetype'), + url('./assets/font/iconfont.svg?t=1563786008234#iconfont') format('svg'); + } + + .iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + .icon-chenggong:before { + content: "\e873"; + }
打包便可,訪問網頁能夠看見圖標。
具體可查看 webpack4 官網。