-
Notifications
You must be signed in to change notification settings - Fork 13
(十一)复制public文件夹
阿峰 edited this page May 29, 2023
·
1 revision
一般public文件夹都会放一些静态资源,可以直接根据绝对路径引入,比如图片,css,js文件等,不需要webpack进行解析,只需要打包的时候把public下内容复制到构建出口文件夹中,可以借助copy-webpack-plugin插件
- 安装依赖
npm i copy-webpack-plugin -D
开发环境已经在
devServer
中配置了static
托管了public
文件夹,在开发环境使用绝对路径可以访问到public
下的文件,但打包构建时不做处理会访问不到,所以现在需要在打包配置文件webpack.prod.js
中新增copy
插件配置。
- webpack.prod.js
// webpack.prod.js
// ..
const path = require('path')
const CopyPlugin = require('copy-webpack-plugin');
module.exports = merge(baseConfig, {
mode: 'production',
plugins: [
// 复制文件插件
new CopyPlugin({
patterns: [
{
from: path.resolve(__dirname, '../public'), // 复制public下文件
to: path.resolve(__dirname, '../dist'), // 复制到dist目录中
filter: source => {
return !source.includes('index.html') // 忽略index.html
}
},
],
}),
]
})
在上面的配置中,忽略了index.html,因为
html-webpack-plugin
会以public下的index.html
为模板生成一个index.html
到dist文件下,所以不需要再复制该文件了。
测试一下,在public中新增一个favicon.ico图标文件,在index.html中引入
- 在index.html中引入favicon.ico
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 绝对路径引入图标文件 -->
<link data-n-head="ssr" rel="icon" type="image/x-icon" href="/favicon.ico">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>webpack5-react-ts</title>
</head>
<body>
<!-- 容器节点 -->
<div id="root"></div>
</body>
</html>
- 再执行
npm run build:dev
打包,就可以看到public
下的favicon.ico
图标文件被复制到dist文件中了。