6.6 KiB
6.6 KiB
一、环境及依赖配置
1.1、环境要求
Node版本要在10.13.0以上
1.2、基础依赖
-- 安装webpack所需依赖
npm i webpack webpack-cli webpack-dev-server --save
-- 安装自动生成html依赖
npm i html-webpack-plugin html-loader clean-webpack-plugin --save-dev
-- 安装css/字体图表处理依赖
npm i css-loader style-loader sass sass-loader mini-css-extract-plugin --save
-- 如果有scss则还需引入
npm i sass sass-loader --save
-- 如果有less则还需引入
npm i less less-loader --save
-- 为不同内核的浏览器加上CSS前缀
`npm install postcss-loader autoprefixer --save
`
`-- 图片及字体处理
`
`npm i url-loader file-loader --save
`
`-- 合并配置
`
`npm i webpack-merge --save-dev`
说明:这里只是一些基础依赖,如果有其他优化调整额外需要引入依赖的话,需要查看一下是否与webpack5是否兼容。
二、配置
2.1、通用配置webpack.base.js
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssPlugin = require('mini-css-extract-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const webpack = require('webpack')
const name = 'ecrm-front'
module.exports = {
// 使用回调函数。或者直接返回对象。
optimization: {
nodeEnv: false
},
target: 'web',
entry: path.resolve(__dirname, './src/main.js'),
output: {
crossOriginLoading: 'anonymous',
path: path.resolve(__dirname, 'dist'),
publicPath: `/${name}`,
library: `${name}-[name]`,
libraryTarget: 'umd',
chunkLoadingGlobal: `webpackJson_${name}`,
filename: 'js/[name]_[hash:8].js',
clean: true
},
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html',
publicPath: `/${name}/`
}),
new MiniCssPlugin({
filename: 'css/bundle.css'
}),
new VueLoaderPlugin(),
new webpack.ProvidePlugin({
Path: ['path'],
process: 'process/browser'
})
],
module: {
rules: [
{ test: /\.vue$/, loader: 'vue-loader' },
{ test: /\.js$/, loader: 'babel-loader', exclude: /node_module/ },
{ test: /\.css$/, use: [MiniCssPlugin.loader, 'css-loader', 'postcss-loader'] },
{
test: /\.scss$/,
use: [
{
loader: MiniCssPlugin.loader,
options: { publicPath: '..' }
},
'css-loader',
'postcss-loader',
'sass-loader'
],
generator: {
filename: './scss/[name]_[hash].[ext]'
}
},
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [path.resolve(__dirname, 'src/assets/icons/svg')],
options: {
symbolId: 'icon-[name]'
}
},
{
test: /\.jpg$/,
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 4 * 1024 * 1024 // 4M
}
}
},
{
test: /\.gif$/,
type: 'asset',
parser: {
dataUrlCondition: {
maxSize: 4 * 1024 * 1024 // 4M
}
}
},
{
test: /\.png$/,
type: 'asset/resource',
// 打包后的静态资源位置 及 文件名
// generator: {
// filename: './image/[hash].[ext]'
// },
parser: {
dataUrlCondition: {
maxSize: 1024 * 1024
}
}
},
{ test: /\.html$/, loader: 'html-loader' },
{
test: /\.wav$/,
loader: 'url-loader',
options: {
name: 'audios/[name].[ext]',
limit: 10
}
}
]
},
resolve: {
// https://github.com/babel/babel/issues/8462
// https://blog.csdn.net/qq_39807732/article/details/110089893
// 如果确认需要node polyfill,设置resolve.fallback安装对应的依赖
// webpack5 关闭node功能 要自己导入
fallback: {
},
alias: {
'@': path.resolve(__dirname, './src')
},
extensions: ['.json', '.js', '.vue']
},
// 关闭性能提示
performance: {
hints: false
}
}
2.2、出口配置文件,例如webpack.gray.js
const { merge } = require('webpack-merge')
const path = require('path')
const webpack = require('webpack')
const baseConfig = require('./webpack.base.js')
const name = 'ecrm-front'
const grayConfig = {
// 使用回调函数。或者直接返回对象。
mode: 'production',
devServer: {
open: false,
port: 80,
hot: true,
static: path.resolve(__dirname, 'dist') // 网站的根目录为 根目录/dist,如果配置不对,会报Cannot GET /错误
},
plugins: [
new webpack.DefinePlugin({
'process.env': {
// 定义环境和变量
NODE_ENV: JSON.stringify('production'),
VUE_APP_CURRENTMODE: JSON.stringify('gray'),
// 访问地址
VUE_APP_ROOTURL: JSON.stringify(`http://192.168.21.31/${name}`),
// CRM web接口前缀
VUE_APP_CTX: JSON.stringify('http://192.168.21.31/ecrm-web'),
// 系统管理接口前缀
VUE_APP_SSOURL: JSON.stringify('http://192.168.21.31/usm-api'),
// 报表地址前缀
VUE_APP_REPORTURL: JSON.stringify('http://app.vazyme.cn/fms-report'),
// BI地址前缀
VUE_APP_BIURL: JSON.stringify('https://app.vazyme.cn/fms-finebi'),
// CRM render接口前缀
VUE_APP_CRMRENDERURL: JSON.stringify('http://192.168.21.31/ecrm-render'),
// 附件上传接口前缀
VUE_APP_FILEURL: JSON.stringify('http://192.168.21.31/doc-cloud-oss'),
// CRM follow接口前置
VUE_APP_COMPLIANCEURL: JSON.stringify('http://192.168.21.31/ecrm-follow'),
// CRM visit接口前缀
VUE_APP_VISIT_CTX: JSON.stringify('http://192.168.21.31/ecrm-visit'),
// CRM export接口前缀
VUE_APP_EXPORT_CTX: JSON.stringify('http://192.168.21.31/ecrm-export'),
// CRM 移动端访问地址
VUE_APP_ROOTURL_MOBILE: JSON.stringify('http://192.168.21.31/ecrm-mfront/'),
// CRM 打印工程接口前置
VUE_APP_PRINT: JSON.stringify('http://192.168.21.31/ecrm-print'),
// 网关注销接口
VUE_APP_GATEWAYURL: JSON.stringify('http://192.168.21.31/sso-service'),
// 基座应用
MAIN_ROOT: JSON.stringify('http://192.168.21.31/home')
}
})
]
}
module.exports = merge(baseConfig, grayConfig)
其他还有什么优化配置的可以去webpack中文网站了解一下:https://webpack.docschina.org/concepts/