面试题答案
一键面试配置思路
- 环境变量定义:通过设置环境变量来区分不同环境,如
NODE_ENV
。在开发环境中可以设置为development
,测试环境和生产环境可设置为production
。 - 多配置文件:使用 Webpack 的多配置文件功能,根据环境变量加载不同的配置文件。每个配置文件针对特定环境对 JavaScript 代码优化进行设置。
- 优化插件:
- 开发环境:保留调试信息,使用
source - map
方便调试。可使用webpack - dev - server
提供热更新等开发辅助功能。 - 生产环境:使用
TerserPlugin
进行代码压缩,移除未使用代码可以配合PurgeCSS
插件(若项目中有 CSS 相关内容,JavaScript 部分可通过 Tree - shaking 移除未使用代码,前提是使用 ES6 模块语法等支持 Tree - shaking 的方式)。
- 开发环境:保留调试信息,使用
示例代码
- 项目结构
project
│
├── dist
├── src
│ ├── index.js
│ └──...
├── webpack.common.js
├── webpack.dev.js
├── webpack.prod.js
└── package.json
- webpack.common.js
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset - env']
}
}
}
]
}
};
- webpack.dev.js
const merge = require('webpack - merge');
const common = require('./webpack.common.js');
module.exports = merge(common, {
mode: 'development',
devtool: 'inline - source - map',
devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 3000
}
});
- webpack.prod.js
const merge = require('webpack - merge');
const common = require('./webpack.common.js');
const TerserPlugin = require('terser - webpack - plugin');
module.exports = merge(common, {
mode: 'production',
optimization: {
minimizer: [
new TerserPlugin({
terserOptions: {
compress: {
drop_console: true // 移除 console.log 等调试语句
}
}
})
]
}
});
- package.json 中 scripts 配置
{
"scripts": {
"dev": "webpack - - config webpack.dev.js",
"build": "webpack - - config webpack.prod.js"
}
}
通过上述配置,执行 npm run dev
会使用开发环境配置,执行 npm run build
会使用生产环境配置,实现了针对不同环境对 JavaScript 代码的差异化优化。