105 lines
3.5 KiB
JavaScript
105 lines
3.5 KiB
JavaScript
const path = require("path");
|
||
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
||
|
||
const resolve = (dir) => {
|
||
return path.join(__dirname, dir);
|
||
};
|
||
|
||
// 项目部署基础
|
||
const BASE_URL = process.env.NODE_ENV === "development" ? "/" : "/";
|
||
const sourceMap = process.env.NODE_ENV === "development";
|
||
const ResponsiveLoaderSharp = require('responsive-loader/sharp');
|
||
module.exports = {
|
||
publicPath: BASE_URL,
|
||
lintOnSave: false, // 是否启用 eslint
|
||
|
||
chainWebpack: (config) => {
|
||
// 禁用 CaseSensitivePathsPlugin
|
||
config.plugins.delete('case-sensitive-paths');
|
||
|
||
// 别名
|
||
config.resolve.alias.set("@", resolve("src"));
|
||
config.resolve.alias.set("_c", resolve("src/components"));
|
||
|
||
// 统一图片产物目录:dist/images(保留子目录,不带 hash)
|
||
// 说明:Vue CLI 默认会把被打包的图片输出到 dist/img(带 hash),
|
||
// 这里覆盖为与 CopyWebpackPlugin 一致的 images 目录,避免出现 dist/img。
|
||
config.module.rule('images')
|
||
.test(/\.(png|jpe?g|gif|webp)(\?.*)?$/)
|
||
.use('url-loader')
|
||
.loader('url-loader')
|
||
.options({
|
||
limit: 10000,
|
||
esModule: false,
|
||
outputPath: 'images',
|
||
context: resolve('src/assets/img'),
|
||
name: '[path][name].[ext]'
|
||
});
|
||
|
||
config.module.rule('svg')
|
||
.test(/\.svg$/)
|
||
.use('file-loader')
|
||
.loader('file-loader')
|
||
.options({
|
||
context: resolve('src/assets/img'),
|
||
name: 'images/[path][name].[ext]'
|
||
});
|
||
},
|
||
|
||
configureWebpack: {
|
||
plugins: [
|
||
new CopyWebpackPlugin([
|
||
{
|
||
from: resolve('src/assets/img'),
|
||
to: 'images'
|
||
}
|
||
])
|
||
],
|
||
output: {
|
||
filename: "js/[hash].js",
|
||
}
|
||
},
|
||
|
||
css: {
|
||
loaderOptions: {
|
||
postcss: {
|
||
postcssOptions: {
|
||
plugins: [
|
||
require('autoprefixer'),
|
||
require('postcss-pxtorem')({
|
||
rootValue: 16,
|
||
propList: ['*'],
|
||
selectorBlackList: [],
|
||
replace: true,
|
||
mediaQuery: false,
|
||
minPixelValue: 1,
|
||
exclude: /node_modules/i
|
||
})
|
||
]
|
||
}
|
||
},
|
||
less: {
|
||
lessOptions: {
|
||
javascriptEnabled: true,
|
||
modifyVars: {
|
||
'@primary-color': '#3498db',
|
||
'@success-color': '#52c41a',
|
||
'@warning-color': '#faad14',
|
||
'@error-color': '#f5222d',
|
||
'@font-size-base': '14px',
|
||
'@heading-color': '#262626',
|
||
'@text-color': '#595959',
|
||
'@text-color-secondary': '#8c8c8c',
|
||
'@disabled-color': '#bfbfbf',
|
||
'@border-radius-base': '4px',
|
||
'@border-color-base': '#d9d9d9',
|
||
'@box-shadow-base': '0 2px 8px rgba(0, 0, 0, 0.15)'
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
productionSourceMap: sourceMap,
|
||
};
|