mirror of
https://github.com/youzan/vant.git
synced 2025-10-15 23:55:08 +00:00
refactor(@vant/cli): migrate to ESM package
This commit is contained in:
26
packages/vant-cli/cjs/babel-preset-vue-ts.cjs
Normal file
26
packages/vant-cli/cjs/babel-preset-vue-ts.cjs
Normal file
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* @babel/preset-typescript 不支持编译 Vue 文件中的 ts 代码
|
||||
* 通过手动添加 @babel/plugin-transform-typescript 的方式来解决这个问题
|
||||
* see: https://github.com/babel/babel-loader/pull/738
|
||||
*/
|
||||
|
||||
const { readFileSync } = require('fs');
|
||||
const { declare } = require('@babel/helper-plugin-utils');
|
||||
|
||||
module.exports = declare(() => ({
|
||||
overrides: [
|
||||
{
|
||||
test: (filePath) => {
|
||||
if (/\.vue$/.test(filePath)) {
|
||||
const template = readFileSync(filePath, { encoding: 'utf8' });
|
||||
return (
|
||||
template.includes('lang="ts"') || template.includes("lang='ts'")
|
||||
);
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
plugins: [require('@babel/plugin-transform-typescript')],
|
||||
},
|
||||
],
|
||||
}));
|
31
packages/vant-cli/cjs/babel.config.cjs
Normal file
31
packages/vant-cli/cjs/babel.config.cjs
Normal file
@@ -0,0 +1,31 @@
|
||||
module.exports = function (api, options) {
|
||||
if (api) {
|
||||
api.cache.never();
|
||||
}
|
||||
|
||||
const { BABEL_MODULE, NODE_ENV } = process.env;
|
||||
const isTest = NODE_ENV === 'test';
|
||||
const useESModules = BABEL_MODULE !== 'commonjs' && !isTest;
|
||||
|
||||
return {
|
||||
presets: [
|
||||
[
|
||||
require.resolve('@babel/preset-env'),
|
||||
{
|
||||
modules: useESModules ? false : 'commonjs',
|
||||
loose: options.loose,
|
||||
},
|
||||
],
|
||||
require.resolve('@babel/preset-typescript'),
|
||||
require('./babel-preset-vue-ts.cjs'),
|
||||
],
|
||||
plugins: [
|
||||
[
|
||||
require.resolve('@vue/babel-plugin-jsx'),
|
||||
{
|
||||
enableObjectSlots: options.enableObjectSlots,
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
||||
};
|
47
packages/vant-cli/cjs/jest.config.cjs
Normal file
47
packages/vant-cli/cjs/jest.config.cjs
Normal file
@@ -0,0 +1,47 @@
|
||||
const { join } = require('path');
|
||||
const { existsSync } = require('fs');
|
||||
const { ROOT } = require('./shared.cjs');
|
||||
|
||||
const JEST_SETUP_FILE = join(__dirname, 'jest.setup.cjs');
|
||||
const JEST_FILE_MOCK_FILE = join(__dirname, 'jest.file-mock.cjs');
|
||||
const JEST_STYLE_MOCK_FILE = join(__dirname, 'jest.style-mock.cjs');
|
||||
|
||||
const DEFAULT_CONFIG = {
|
||||
testEnvironment: 'jsdom',
|
||||
moduleNameMapper: {
|
||||
'\\.(css|less|scss)$': JEST_STYLE_MOCK_FILE,
|
||||
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
|
||||
JEST_FILE_MOCK_FILE,
|
||||
},
|
||||
setupFilesAfterEnv: [JEST_SETUP_FILE],
|
||||
moduleFileExtensions: ['js', 'jsx', 'vue', 'ts', 'tsx'],
|
||||
transform: {
|
||||
'\\.(vue)$': 'vue3-jest',
|
||||
'\\.(js|jsx|ts|tsx)$': 'babel-jest',
|
||||
},
|
||||
transformIgnorePatterns: ['/node_modules/(?!(@vant/cli))/'],
|
||||
snapshotSerializers: ['jest-serializer-html'],
|
||||
collectCoverage: true,
|
||||
collectCoverageFrom: [
|
||||
'src/**/*.{js,jsx,ts,tsx,vue}',
|
||||
'!**/demo/**',
|
||||
'!**/test/**',
|
||||
],
|
||||
coverageReporters: ['html', 'lcov', 'text-summary'],
|
||||
coverageDirectory: './test/coverage',
|
||||
};
|
||||
|
||||
function readRootConfig() {
|
||||
const ROOT_CONFIG_PATH = join(ROOT, 'jest.config.js');
|
||||
|
||||
if (existsSync(ROOT_CONFIG_PATH)) {
|
||||
return require(ROOT_CONFIG_PATH);
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
...DEFAULT_CONFIG,
|
||||
...readRootConfig(),
|
||||
};
|
1
packages/vant-cli/cjs/jest.file-mock.cjs
Normal file
1
packages/vant-cli/cjs/jest.file-mock.cjs
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = 'test-file-stub';
|
1
packages/vant-cli/cjs/jest.setup.cjs
Normal file
1
packages/vant-cli/cjs/jest.setup.cjs
Normal file
@@ -0,0 +1 @@
|
||||
require('jest-canvas-mock');
|
1
packages/vant-cli/cjs/jest.style-mock.js
Normal file
1
packages/vant-cli/cjs/jest.style-mock.js
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = {};
|
42
packages/vant-cli/cjs/postcss.config.cjs
Normal file
42
packages/vant-cli/cjs/postcss.config.cjs
Normal file
@@ -0,0 +1,42 @@
|
||||
const { join } = require('path');
|
||||
const { existsSync } = require('fs');
|
||||
const { ROOT } = require('./shared.cjs');
|
||||
|
||||
function getRootPostcssConfig() {
|
||||
const ROOT_POSTCSS_CONFIG_FILE = join(ROOT, 'postcss.config.js');
|
||||
if (existsSync(ROOT_POSTCSS_CONFIG_FILE)) {
|
||||
return require(ROOT_POSTCSS_CONFIG_FILE);
|
||||
}
|
||||
return { plugins: [] };
|
||||
}
|
||||
|
||||
function getPostcssPlugins(rootConfig) {
|
||||
const plugins = rootConfig.plugins || [];
|
||||
|
||||
if (Array.isArray(plugins)) {
|
||||
const hasPostcssPlugin = plugins.find(
|
||||
(plugin) =>
|
||||
plugin === 'autoprefixer' && plugin.postcssPlugin === 'autoprefixer'
|
||||
);
|
||||
if (hasPostcssPlugin) {
|
||||
return plugins;
|
||||
}
|
||||
|
||||
return [require('autoprefixer'), ...plugins];
|
||||
}
|
||||
|
||||
return {
|
||||
autoprefixer: {},
|
||||
...plugins,
|
||||
};
|
||||
}
|
||||
|
||||
function resolvePostcssConfig() {
|
||||
const rootConfig = getRootPostcssConfig();
|
||||
return {
|
||||
...rootConfig,
|
||||
plugins: getPostcssPlugins(rootConfig),
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = resolvePostcssConfig();
|
23
packages/vant-cli/cjs/shared.cjs
Normal file
23
packages/vant-cli/cjs/shared.cjs
Normal file
@@ -0,0 +1,23 @@
|
||||
const { join, dirname } = require('path');
|
||||
const { existsSync } = require('fs');
|
||||
|
||||
function findRootDir(dir) {
|
||||
if (existsSync(join(dir, 'vant.config.js'))) {
|
||||
return dir;
|
||||
}
|
||||
|
||||
const parentDir = dirname(dir);
|
||||
if (dir === parentDir) {
|
||||
return dir;
|
||||
}
|
||||
|
||||
return findRootDir(parentDir);
|
||||
}
|
||||
|
||||
const CWD = process.cwd();
|
||||
const ROOT = findRootDir(CWD);
|
||||
|
||||
module.exports = {
|
||||
CWD,
|
||||
ROOT,
|
||||
};
|
Reference in New Issue
Block a user