neverland 79dfc4b8cb
feat(@vant/cli): auto complete mjs path (#10649)
* feat(@vant/cli): auto complete mjs path

* release: 3.5.0-beta.1
2022-05-29 21:41:57 +08:00

95 lines
2.4 KiB
TypeScript

import { existsSync, readFileSync } from 'fs';
import { fileURLToPath, pathToFileURL } from 'url';
import { join, dirname, isAbsolute } from 'path';
function findRootDir(dir: string): string {
if (existsSync(join(dir, 'vant.config.mjs'))) {
return dir;
}
const parentDir = dirname(dir);
if (dir === parentDir) {
return dir;
}
return findRootDir(parentDir);
}
// Root paths
export const CWD = process.cwd();
export const ROOT = findRootDir(CWD);
export const ES_DIR = join(ROOT, 'es');
export const LIB_DIR = join(ROOT, 'lib');
export const DOCS_DIR = join(ROOT, 'docs');
export const VETUR_DIR = join(ROOT, 'vetur');
export const SITE_DIST_DIR = join(ROOT, 'site-dist');
export const VANT_CONFIG_FILE = join(ROOT, 'vant.config.mjs');
export const PACKAGE_JSON_FILE = join(ROOT, 'package.json');
// Relative paths
const __dirname = dirname(fileURLToPath(import.meta.url));
export const CJS_DIR = join(__dirname, '..', '..', 'cjs');
export const DIST_DIR = join(__dirname, '..', '..', 'dist');
export const CONFIG_DIR = join(__dirname, '..', 'config');
export const SITE_SRC_DIR = join(__dirname, '..', '..', 'site');
// Dist files
export const PACKAGE_ENTRY_FILE = join(DIST_DIR, 'package-entry.js');
export const PACKAGE_STYLE_FILE = join(DIST_DIR, 'package-style.css');
export const STYLE_DEPS_JSON_FILE = join(DIST_DIR, 'style-deps.json');
// Config files
export const POSTCSS_CONFIG_FILE = join(CJS_DIR, 'postcss.config.cjs');
export const JEST_CONFIG_FILE = join(CJS_DIR, 'jest.config.cjs');
export const SCRIPT_EXTS = [
'.js',
'.jsx',
'.vue',
'.ts',
'.tsx',
'.mjs',
'.cjs',
];
export const STYLE_EXTS = ['.css', '.less', '.scss'];
export function getPackageJson() {
const rawJson = readFileSync(PACKAGE_JSON_FILE, 'utf-8');
return JSON.parse(rawJson);
}
async function getVantConfigAsync() {
try {
// https://github.com/nodejs/node/issues/31710
// absolute file paths don't work on Windows
return (await import(pathToFileURL(VANT_CONFIG_FILE).href)).default;
} catch (err) {
return {};
}
}
const vantConfig = await getVantConfigAsync();
export function getVantConfig() {
return vantConfig;
}
function getSrcDir() {
const vantConfig = getVantConfig();
const srcDir = vantConfig.build?.srcDir;
if (srcDir) {
if (isAbsolute(srcDir)) {
return srcDir;
}
return join(ROOT, srcDir);
}
return join(ROOT, 'src');
}
export const SRC_DIR = getSrcDir();
export const STYLE_DIR = join(SRC_DIR, 'style');