# webpack4 前端環境建置 part3
檔案搬移,目前較主流的開發方式為 src -> 開發資料夾、 dist 編譯後檔案資料夾,所以我們先把 index.html 放到 src 資料夾內
來顯示目前資料夾結構前,我們使用 tree 來顯示,因為指令問題先加入 .gitignore 資料夾
node_modules
然後在終端機打
tree gitignore
出現目前資料夾結構為
.
├── dist
│ ├── about.js
│ ├── css
│ │ └── index.css
│ └── index.js
├── package-lock.json
├── package.json
├── postcss.config.js
├── src
│ ├── css
│ │ └── index.css
│ ├── index.html
│ └── js
│ ├── about.js
│ └── index.js
└── webpack.config.js
在 index.js 裡面 import index.html
import "../index.html";
因爲 html 不需被瀏覽器編譯,所以不需要安裝 html loader,我們需要的是把 index.html 搬檔案從 src 搬到 dist 裡面去 (使用 file-loader)
npm i -D file-loader
webpack.config.js 裡面加入 html rules
module.exports = {
module: {
rules: [
{
test: /\.html$/i,
use:[
{
// 所有的檔案都可以用 file-loader 只要規則寫好就行了
loader: "file-loader",
options: {
// path -> 路徑, name -> 檔名, ext -> 副檔名
name: '[path][name].[ext]'
}
}
]
},
],
},
}
用 webpack 打包後看一下結果
npm run deploy
目前 dist 資料夾結構,可以看到 index.html 成功被打包到 dist 資料夾內
.
├── dist
│ ├── about.js
│ ├── css
│ │ └── index.css
│ ├── index.html
│ └── index.js
稍微調整一下 js 輸出的路徑
module.exports = {
output: {
path: path.resolve(__dirname, "./dist"),
filename: './js/[name].js'
}
}
刪除原本 dist 資料夾後再打包
目前的資料夾結構 js 檔案包在 js 資料夾下面
.
├── dist
│ ├── css
│ │ └── index.css
│ ├── index.html
│ └── js
│ ├── about.js
│ └── index.js
在html src index.js 路徑也可以調整一下,在引入 CSS 進來
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./css/index.css">
</head>
<body>
<h1>變顏色</h1>
<script src="./js/index.js"></script>
</body>
</html>
# 加入 sass-loader
npm i -D sass-loader node-sass
在 webpack.config.js 加入編譯 scss rule
module.exports = {
module : {
rules: {
test: /\.(sass|scss)/i,
use: [
"style-loader",
"css-loader",
"postcss-loader",
"sass-loader"
]
}
}
}
在 src 建立 scss 資料夾並新增一個 index.scss 檔案
隨便寫一些樣式
到 entry js 中 (index.js) 先刪除 css 再引入 index.scss
import "../scss/index.scss";
import "../index.html";
刪除 dist 資料夾後 deploy 會發現沒有獨立的 scss,因為這邊用 "style-loader" 所以 scss 會包在 index.js 裡面
把 scss 分檔
module.exports = {
module : {
rules: {
test: /\.(sass|scss)$/i,
use: [
MiniCssExtractPlugin.loader,
"css-loader",
"postcss-loader",
"sass-loader"
]
}
}
}
部署以後會發現有個 css 的檔案,那就是 scss 經由 webpack 編譯後輸出的 css