feat(@vant/cli): suport modify internal webpack config (#7227)

This commit is contained in:
ChangeHow
2020-09-22 18:51:33 +08:00
committed by GitHub
parent 43da00b724
commit 0642a73628
5 changed files with 23 additions and 23 deletions

View File

@@ -6,12 +6,14 @@ import {
readFileSync,
outputFileSync,
} from 'fs-extra';
import merge from 'webpack-merge';
import {
SRC_DIR,
getVantConfig,
ROOT_WEBPACK_CONFIG_FILE,
ROOT_POSTCSS_CONFIG_FILE,
} from './constant';
import { WebpackConfig } from './types';
export const EXT_REGEXP = /\.\w+$/;
export const SFC_REGEXP = /\.(vue)$/;
@@ -37,9 +39,9 @@ export function getComponents() {
const EXCLUDES = ['.DS_Store'];
const dirs = readdirSync(SRC_DIR);
return dirs
.filter(dir => !EXCLUDES.includes(dir))
.filter(dir =>
ENTRY_EXTS.some(ext => {
.filter((dir) => !EXCLUDES.includes(dir))
.filter((dir) =>
ENTRY_EXTS.some((ext) => {
const path = join(SRC_DIR, dir, `index.${ext}`);
if (existsSync(path)) {
return hasDefaultExport(readFileSync(path, 'utf-8'));
@@ -99,18 +101,20 @@ export function normalizePath(path: string): string {
return path.replace(/\\/g, '/');
}
export function getWebpackConfig(): object {
export function getWebpackConfig(defaultConfig: WebpackConfig): object {
if (existsSync(ROOT_WEBPACK_CONFIG_FILE)) {
const config = require(ROOT_WEBPACK_CONFIG_FILE);
// 如果是函数形式,可能并不仅仅是添加额外的处理流程,而是在原有流程上进行修改
// 比如修改markdown-loader,添加options.enableMetaData
if (typeof config === 'function') {
return config();
return config(defaultConfig);
}
return config;
return merge(defaultConfig, config);
}
return {};
return defaultConfig;
}
export function getPostcssConfig(): object {

View File

@@ -10,9 +10,8 @@ export function getPackageConfig(isMinify: boolean): WebpackConfig {
setBuildTarget('package');
return merge(
baseConfig as any,
{
return getWebpackConfig(
merge(baseConfig as any, {
mode: 'production',
entry: {
[name]: join(ES_DIR, 'index.js'),
@@ -39,7 +38,6 @@ export function getPackageConfig(isMinify: boolean): WebpackConfig {
optimization: {
minimize: isMinify,
},
},
getWebpackConfig()
})
);
}

View File

@@ -103,5 +103,5 @@ export function getSiteDevBaseConfig(): WebpackConfig {
}
export function getSiteDevConfig(): WebpackConfig {
return merge(getSiteDevBaseConfig(), getWebpackConfig());
return getWebpackConfig(getSiteDevBaseConfig());
}

View File

@@ -10,9 +10,8 @@ const outputDir = get(vantConfig, 'build.site.outputDir', SITE_DIST_DIR);
const publicPath = get(vantConfig, 'build.site.publicPath', '/');
export function getSitePrdConfig(): WebpackConfig {
return merge(
getSiteDevBaseConfig(),
{
return getWebpackConfig(
merge(getSiteDevBaseConfig(), {
mode: 'production',
stats: 'none',
performance: {
@@ -25,7 +24,6 @@ export function getSitePrdConfig(): WebpackConfig {
filename: '[name].[hash:8].js',
chunkFilename: 'async_[name].[chunkhash:8].js',
},
},
getWebpackConfig()
})
);
}