output 属性告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件。
生产环境的 output 需要通过 contenthash 值来区分版本和变动,可达到清缓存的效果,而本地环境为了构建效率,则不引人 contenthash。
新增 paths.js,封装路径方法:
const fs = require('fs') // 异步操作,fs 读取文件模块const path = require('path') // 引入路径const appDirectory = fs.realpathSync(process.cwd());const resolveApp = relativePath => path.resolve(appDirectory, relativePath);// 导出项目的路径/文件module.exports = {resolveApp,appPublic: resolveApp('public'),appHtml: resolveApp('public/index.html'),appSrc: resolveApp('src'),appDist: resolveApp('dist'),appTsConfig: resolveApp('tsconfig.json'),}
修改开发环境配置文件 webpack.dev.js:
// webpack.dev.js
module.exports = merge(common, {
// 输出
output: {
// bundle 文件名称
filename: '[name].bundle.js',
// bundle 文件路径
path: resolveApp('dist'),
// 编译前清除目录
clean: true
},
})
修改生产环境配置文件 webpack.prod.js:
module.exports = merge(common, {
// 输出
output: {
// bundle 文件名称 【只有这里和开发环境不一样】
filename: '[name].[contenthash].bundle.js',
// bundle 文件路径
path: resolveApp('dist'),
// 编译前清除目录
clean: true
},
})
上述 filename 的占位符解释如下:
- [name] - chunk name(例如 [name].js -> app.js)。如果 chunk 没有名称,则会使用其 id 作为名称
- [contenthash] - 输出文件内容的 md4-hash(例如 [contenthash].js -> 4ea6ff1de66c537eb9b2.js)
