mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-05-23 15:09:16 +08:00
feat(cli): support custom webpack config
This commit is contained in:
parent
578448d040
commit
287251fa90
@ -7,14 +7,18 @@ export const SRC_DIR = join(CWD, 'src');
|
|||||||
export const DOCS_DIR = join(CWD, 'docs');
|
export const DOCS_DIR = join(CWD, 'docs');
|
||||||
export const CONFIG_FILE = join(CWD, 'components.config.js');
|
export const CONFIG_FILE = join(CWD, 'components.config.js');
|
||||||
export const PACKAGE_JSON_FILE = join(CWD, 'package.json');
|
export const PACKAGE_JSON_FILE = join(CWD, 'package.json');
|
||||||
|
export const WEBPACK_CONFIG_FILE = join(CWD, 'webpack.config.js');
|
||||||
|
|
||||||
export const DIST_DIR = join(__dirname, '../../dist');
|
export const DIST_DIR = join(__dirname, '../../dist');
|
||||||
export const CONFIG_DIR = join(__dirname, '../config');
|
export const CONFIG_DIR = join(__dirname, '../config');
|
||||||
|
|
||||||
export const PACKAGE_ENTRY_FILE = join(DIST_DIR, 'index.js');
|
export const PACKAGE_ENTRY_FILE = join(DIST_DIR, 'index.js');
|
||||||
export const MOBILE_CONFIG_FILE = join(DIST_DIR, 'mobile-config.js');
|
export const MOBILE_CONFIG_FILE = join(DIST_DIR, 'mobile-config.js');
|
||||||
export const DESKTOP_CONFIG_FILE = join(DIST_DIR, 'desktop-config.js');
|
export const DESKTOP_CONFIG_FILE = join(DIST_DIR, 'desktop-config.js');
|
||||||
export const BABEL_CONFIG_FILE = join(CONFIG_DIR, 'babel.config.js');
|
|
||||||
export const JEST_CONFIG_FILE = join(CONFIG_DIR, 'jest.config.js');
|
export const JEST_CONFIG_FILE = join(CONFIG_DIR, 'jest.config.js');
|
||||||
|
export const BABEL_CONFIG_FILE = join(CONFIG_DIR, 'babel.config.js');
|
||||||
|
export const POSTCSS_CONFIG_FILE = join(CONFIG_DIR, 'postcss.config.js');
|
||||||
|
export const JEST_TRANSFORM_FILE = join(CONFIG_DIR, 'jest.transform.js');
|
||||||
export const JEST_FILE_MOCK_FILE = join(CONFIG_DIR, 'jest.file-mock.js');
|
export const JEST_FILE_MOCK_FILE = join(CONFIG_DIR, 'jest.file-mock.js');
|
||||||
export const JEST_STYLE_MOCK_FILE = join(CONFIG_DIR, 'jest.style-mock.js');
|
export const JEST_STYLE_MOCK_FILE = join(CONFIG_DIR, 'jest.style-mock.js');
|
||||||
export const JEST_TRANSFORM_FILE = join(CONFIG_DIR, 'jest.transform.js');
|
|
||||||
export const POSTCSS_CONFIG_FILE = join(CONFIG_DIR, 'postcss.config.js');
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import fs from 'fs-extra';
|
|
||||||
import decamelize from 'decamelize';
|
import decamelize from 'decamelize';
|
||||||
|
import { readdirSync, existsSync, lstatSync } from 'fs-extra';
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import { SRC_DIR } from './constant';
|
import { SRC_DIR, WEBPACK_CONFIG_FILE } from './constant';
|
||||||
|
|
||||||
export const EXT_REGEXP = /\.\w+$/;
|
export const EXT_REGEXP = /\.\w+$/;
|
||||||
export const SFC_REGEXP = /\.(vue)$/;
|
export const SFC_REGEXP = /\.(vue)$/;
|
||||||
@ -21,16 +21,16 @@ export function replaceExt(path: string, ext: string) {
|
|||||||
|
|
||||||
export function getComponents() {
|
export function getComponents() {
|
||||||
const EXCLUDES = ['.DS_Store'];
|
const EXCLUDES = ['.DS_Store'];
|
||||||
const dirs = fs.readdirSync(SRC_DIR);
|
const dirs = readdirSync(SRC_DIR);
|
||||||
return dirs
|
return dirs
|
||||||
.filter(dir => !EXCLUDES.includes(dir))
|
.filter(dir => !EXCLUDES.includes(dir))
|
||||||
.filter(dir =>
|
.filter(dir =>
|
||||||
ENTRY_EXTS.some(ext => fs.existsSync(join(SRC_DIR, dir, `index.${ext}`)))
|
ENTRY_EXTS.some(ext => existsSync(join(SRC_DIR, dir, `index.${ext}`)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isDir(dir: string) {
|
export function isDir(dir: string) {
|
||||||
return fs.lstatSync(dir).isDirectory();
|
return lstatSync(dir).isDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isDemoDir(dir: string) {
|
export function isDemoDir(dir: string) {
|
||||||
@ -67,4 +67,19 @@ export function pascalize(str: string): string {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getWebpackConfig(): object {
|
||||||
|
if (existsSync(WEBPACK_CONFIG_FILE)) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
const config = require(WEBPACK_CONFIG_FILE);
|
||||||
|
|
||||||
|
if (typeof config === 'function') {
|
||||||
|
return config();
|
||||||
|
}
|
||||||
|
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
export { decamelize };
|
export { decamelize };
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { join } from 'path';
|
|
||||||
import merge from 'webpack-merge';
|
import merge from 'webpack-merge';
|
||||||
|
import { join } from 'path';
|
||||||
import { baseConfig } from './webpack.base';
|
import { baseConfig } from './webpack.base';
|
||||||
|
import { getWebpackConfig } from '../common';
|
||||||
import { LIB_DIR, DIST_DIR, CONFIG_FILE } from '../common/constant';
|
import { LIB_DIR, DIST_DIR, CONFIG_FILE } from '../common/constant';
|
||||||
|
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
@ -8,7 +9,9 @@ const config = require(CONFIG_FILE);
|
|||||||
const { name } = config;
|
const { name } = config;
|
||||||
|
|
||||||
export function packageConfig(isMinify: boolean) {
|
export function packageConfig(isMinify: boolean) {
|
||||||
return merge(baseConfig as any, {
|
return merge(
|
||||||
|
baseConfig as any,
|
||||||
|
{
|
||||||
mode: 'production',
|
mode: 'production',
|
||||||
entry: {
|
entry: {
|
||||||
[name]: join(DIST_DIR, 'index.js')
|
[name]: join(DIST_DIR, 'index.js')
|
||||||
@ -35,5 +38,7 @@ export function packageConfig(isMinify: boolean) {
|
|||||||
optimization: {
|
optimization: {
|
||||||
minimize: isMinify
|
minimize: isMinify
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
|
getWebpackConfig()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,15 @@ import HtmlWebpackPlugin from 'html-webpack-plugin';
|
|||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import { baseConfig } from './webpack.base';
|
import { baseConfig } from './webpack.base';
|
||||||
import { CONFIG_FILE } from '../common/constant';
|
import { CONFIG_FILE } from '../common/constant';
|
||||||
|
import { getWebpackConfig } from '../common';
|
||||||
|
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
const config = require(CONFIG_FILE);
|
const config = require(CONFIG_FILE);
|
||||||
const title = `${config.title} - ${config.description}`;
|
const title = `${config.title} - ${config.description}`;
|
||||||
|
|
||||||
export const siteDevConfig = merge(baseConfig as any, {
|
export const siteDevConfig = merge(
|
||||||
|
baseConfig as any,
|
||||||
|
{
|
||||||
entry: {
|
entry: {
|
||||||
'site-desktop': join(__dirname, '../../site/desktop/main.js'),
|
'site-desktop': join(__dirname, '../../site/desktop/main.js'),
|
||||||
'site-mobile': join(__dirname, '../../site/mobile/main.js')
|
'site-mobile': join(__dirname, '../../site/mobile/main.js')
|
||||||
@ -17,7 +20,7 @@ export const siteDevConfig = merge(baseConfig as any, {
|
|||||||
open: true,
|
open: true,
|
||||||
host: '0.0.0.0',
|
host: '0.0.0.0',
|
||||||
stats: 'errors-only',
|
stats: 'errors-only',
|
||||||
disableHostCheck: true,
|
disableHostCheck: true
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
path: join(__dirname, '../../site/dist'),
|
path: join(__dirname, '../../site/dist'),
|
||||||
@ -52,4 +55,6 @@ export const siteDevConfig = merge(baseConfig as any, {
|
|||||||
filename: 'mobile.html'
|
filename: 'mobile.html'
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
});
|
},
|
||||||
|
getWebpackConfig()
|
||||||
|
);
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
import { join } from 'path';
|
|
||||||
import merge from 'webpack-merge';
|
import merge from 'webpack-merge';
|
||||||
|
import { join } from 'path';
|
||||||
import { siteDevConfig } from './webpack.site.dev';
|
import { siteDevConfig } from './webpack.site.dev';
|
||||||
|
import { getWebpackConfig } from '../common';
|
||||||
|
|
||||||
export const sitePrdConfig = merge(siteDevConfig, {
|
export const sitePrdConfig = merge(
|
||||||
|
siteDevConfig,
|
||||||
|
{
|
||||||
mode: 'production',
|
mode: 'production',
|
||||||
output: {
|
output: {
|
||||||
path: join(__dirname, '../../site/dist'),
|
path: join(__dirname, '../../site/dist'),
|
||||||
@ -10,4 +13,6 @@ export const sitePrdConfig = merge(siteDevConfig, {
|
|||||||
filename: '[name].[hash:8].js',
|
filename: '[name].[hash:8].js',
|
||||||
chunkFilename: 'async_[name].[chunkhash:8].js'
|
chunkFilename: 'async_[name].[chunkhash:8].js'
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
|
getWebpackConfig()
|
||||||
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user