My Webpack Project
创作时间:
作者:
@小白创作中心
My Webpack Project
引用
CSDN
1.
https://blog.csdn.net/weixin_53961451/article/details/143664167
在 webpack 配置中,入口和出口是非常重要的两个概念。它们分别指定了 webpack 从哪里开始编译以及编译结果输出到哪里。
node内置模块 - path:https://nodejs.org/dist/latest-v12.x/docs/api/path.html
1. 入口(Entry)
入口配置告诉 webpack 从哪个文件开始编译。入口通过 entry
属性进行配置。入口真正配置的是 chunk。
基本配置
module.exports = {
entry: './src/index.js' // 单个入口
};
多个入口
可以配置多个入口,webpack 会为每个入口创建一个单独的 chunk。
module.exports = {
entry: {
main: './src/index.js',
another: './src/another.js'
}
};
动态入口
可以使用函数动态生成入口配置。
module.exports = {
entry: () => ({
main: './src/index.js',
another: './src/another.js'
})
};
规则
- name:chunkname,即 chunk 的名称,默认为
main
。 - hash:总的资源 hash,通常用于解决缓存问题。
- chunkhash:使用 chunkhash,确保每个 chunk 的 hash 值是唯一的。
- id:使用 chunkid,不推荐使用,因为 chunkid 在生产环境中可能会变化,导致缓存失效。
2. 出口(Output)
出口配置告诉 webpack 将编译结果输出到哪里。出口通过 output
属性进行配置。
基本配置
const path = require('path');
module.exports = {
output: {
filename: 'bundle.js', // 输出文件名
path: path.resolve(__dirname, 'dist') // 输出路径
}
};
多个入口的输出
如果配置了多个入口,可以使用占位符来动态生成输出文件名。
const path = require('path');
module.exports = {
entry: {
main: './src/index.js',
another: './src/another.js'
},
output: {
filename: '[name].bundle.js', // 使用[name]占位符
path: path.resolve(__dirname, 'dist')
}
};
使用哈希值
为了防止浏览器缓存问题,可以在输出文件名中使用哈希值。
- hash:总的资源 hash。
- chunkhash:每个 chunk 的 hash。
- contenthash:根据文件内容生成的 hash,适用于 CSS 文件。
const path = require('path');
module.exports = {
output: {
filename: '[name].[contenthash].js', // 使用contenthash
path: path.resolve(__dirname, 'dist')
}
};
公共路径
可以配置公共路径,用于指定资源的加载路径。
const path = require('path');
module.exports = {
output: {
filename: '[name].[contenthash].js',
path: path.resolve(__dirname, 'dist'),
publicPath: '/assets/' // 公共路径
}
};
示例
假设我们有一个项目,使用多个入口和输出配置。
项目结构
my-project/
├── src/
│ ├── index.js
│ └── another.js
├── dist/
├── package.json
└── webpack.config.js
webpack.config.js
const path = require('path');
module.exports = {
mode: 'development', // 或 'production'
entry: {
main: './src/index.js',
another: './src/another.js'
},
output: {
filename: '[name].[contenthash].js',
path: path.resolve(__dirname, 'dist'),
publicPath: '/assets/'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
],
devServer: {
contentBase: './dist',
hot: true
}
};
运行构建
在 package.json
中添加一个 build
脚本:
{
"scripts": {
"build": "webpack"
}
}
然后运行:
npm run build
构建完成后,dist
目录下会生成 main.[contenthash].js
和 another.[contenthash].js
文件,你可以在 HTML 文件中引入这些文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Webpack Project</title>
</head>
<body>
<script src="/assets/main.[contenthash].js"></script>
<script src="/assets/another.[contenthash].js"></script>
</body>
</html>
总结
通过本课程,你已经了解了 webpack 中入口和出口的配置方法,以及如何使用哈希值来解决缓存问题。合理配置入口和出口可以提高项目的可维护性和性能。
热门推荐
克拉霉素+头孢同服,安全吗?
巨幼红细胞性贫血临床表现及诊断治疗指南
汽车外观改装的方法有哪些?这些方法对车辆外观有何影响?
应交增值税的进项税额与销项税额之间怎么处理
“唐探”十年
吃饱后应该躺着、坐着还是站着?医生给出了标准答案,但9成人都做错了
有儿子的父母,老得更快
隐喻图形语言!在平面设计中的运用
充分认识和挖掘蛇口国际海洋城对于深圳建设全球海洋中心城市的独特价值
秋天去哪里玩最好?全国30个省份秋季旅游景点推荐
北欧冬季旅游指南:必备知识与建议
如何有效应对生活中的挑战与关卡,提升自我能力与自信心
AI社交将走向何方?
体制内与体制外有啥区别?张雪峰给出解释,不是所有人都适合考公
后世如何评价曹操?史料中是如何记载的?
风靡元明清官场的“下跪礼”,导致中华文明严重倒退
NBA十大争议人物,“叛徒”杜兰特,恶汉格林,纽约公敌特雷杨
胆固醇高不能吃的食物有哪些?胆固醇高忌口食物一览表
从西海岸到东海岸从孟菲斯到底特律:多元文化背景下美国嘻哈音乐文化发展
你怎么会饿的?上海药物所揭示饥饿素受体识别和激活的分子机制
9家车企准许上路测试L3,自动驾驶时代将来临?
深夜释放自己可以尽情宣泄情绪吗:探讨夜晚情绪宣泄对心理健康的影响
美国媒体如何左右总统选举格局?马斯克力挺特朗普将有多大影响
四种实用书房设计:开放式、半开放式、卧室书房和儿童房结合书房
《十面埋伏》是哪种乐器演奏的
银行取款“新规”以后,11月起,老年人取款超10万要注意哪些?
股市风向标 | 回调中的市场信心分析
《鸣潮》菲比队伍搭配与输出手法攻略 菲比怎么配队
中医解决男性四虚的全面调理方案
云南抚仙湖水下发现古城!有城墙、街道和建筑!据说航空禁飞