mirror of https://github.com/alibaba/ice.git
Feat: support options for compilationConfig (#6880)
* feat: support options for compilationConfig * fix: update plugin rax compat * chore: lint
This commit is contained in:
parent
e858a52280
commit
e4a32686c6
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'@ice/plugin-rax-compat': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: support pass options for `compilationConfig`
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'@ice/shared-config': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
feat: support options for compilationConfig
|
||||||
|
|
@ -16,7 +16,7 @@ export class JSXService {
|
||||||
|
|
||||||
// Reset jsc.transform.react.runtime to classic.
|
// Reset jsc.transform.react.runtime to classic.
|
||||||
config.swcOptions = merge(config.swcOptions || {}, {
|
config.swcOptions = merge(config.swcOptions || {}, {
|
||||||
compilationConfig: (source: string, id: string) => {
|
compilationConfig: (source: string, id: string, compileOptions) => {
|
||||||
let swcCompilationConfig = {};
|
let swcCompilationConfig = {};
|
||||||
const hasJSXComment = source.indexOf('@jsx createElement') !== -1;
|
const hasJSXComment = source.indexOf('@jsx createElement') !== -1;
|
||||||
const isRaxComponent = /(from|require\()\s*['"]rax['"]/.test(source);
|
const isRaxComponent = /(from|require\()\s*['"]rax['"]/.test(source);
|
||||||
|
|
@ -43,7 +43,7 @@ export class JSXService {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return merge({}, originalSwcCompilationConfigFunc(source, id), swcCompilationConfig);
|
return merge({}, originalSwcCompilationConfigFunc(source, id, compileOptions), swcCompilationConfig);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -40,9 +40,21 @@ interface ConfigurationCtx<T = typeof webpack> extends Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Experimental = Configuration['experiments'];
|
type Experimental = Configuration['experiments'];
|
||||||
|
|
||||||
|
export type JSXSuffix = 'jsx' | 'tsx';
|
||||||
|
export interface GetJsxTransformOptions {
|
||||||
|
rootDir: string;
|
||||||
|
mode: Options['mode'];
|
||||||
|
suffix?: JSXSuffix;
|
||||||
|
fastRefresh: boolean;
|
||||||
|
polyfill: Config['polyfill'];
|
||||||
|
enableEnv: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
interface SwcOptions {
|
interface SwcOptions {
|
||||||
removeExportExprs?: string[];
|
removeExportExprs?: string[];
|
||||||
compilationConfig?: SwcCompilationConfig | ((source: string, id: string) => SwcCompilationConfig);
|
compilationConfig?: SwcCompilationConfig |
|
||||||
|
((source: string, id: string, options: GetJsxTransformOptions) => SwcCompilationConfig);
|
||||||
keepExports?: string[] | { value: string[]; include?: (id: string) => boolean };
|
keepExports?: string[] | { value: string[]; include?: (id: string) => boolean };
|
||||||
nodeTransform?: boolean;
|
nodeTransform?: boolean;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,11 @@ import consola from 'consola';
|
||||||
import type { SwcConfig, ReactConfig } from '@ice/bundles';
|
import type { SwcConfig, ReactConfig } from '@ice/bundles';
|
||||||
import type { UnpluginOptions } from '@ice/bundles/compiled/unplugin/index.js';
|
import type { UnpluginOptions } from '@ice/bundles/compiled/unplugin/index.js';
|
||||||
import lodash from '@ice/bundles/compiled/lodash/index.js';
|
import lodash from '@ice/bundles/compiled/lodash/index.js';
|
||||||
import type { Config } from '../types.js';
|
import type { Config, JSXSuffix, GetJsxTransformOptions } from '../types.js';
|
||||||
import transformImport from '../utils/transformImport.js';
|
import transformImport from '../utils/transformImport.js';
|
||||||
|
|
||||||
const { merge } = lodash;
|
const { merge } = lodash;
|
||||||
|
|
||||||
type JSXSuffix = 'jsx' | 'tsx';
|
|
||||||
|
|
||||||
interface Options {
|
interface Options {
|
||||||
rootDir: string;
|
rootDir: string;
|
||||||
mode: 'development' | 'production' | 'none';
|
mode: 'development' | 'production' | 'none';
|
||||||
|
|
@ -84,8 +82,8 @@ const compilationPlugin = (options: Options): UnpluginOptions => {
|
||||||
filename: id,
|
filename: id,
|
||||||
sourceMaps: !!sourceMap,
|
sourceMaps: !!sourceMap,
|
||||||
};
|
};
|
||||||
|
const compileOptions = { rootDir, mode, suffix, fastRefresh, polyfill, enableEnv };
|
||||||
const commonOptions = getJsxTransformOptions({ rootDir, mode, suffix, fastRefresh, polyfill, enableEnv });
|
const commonOptions = getJsxTransformOptions(compileOptions);
|
||||||
|
|
||||||
// auto detect development mode
|
// auto detect development mode
|
||||||
if (
|
if (
|
||||||
|
|
@ -99,7 +97,7 @@ const compilationPlugin = (options: Options): UnpluginOptions => {
|
||||||
merge(programmaticOptions, commonOptions);
|
merge(programmaticOptions, commonOptions);
|
||||||
|
|
||||||
if (typeof compilationConfig === 'function') {
|
if (typeof compilationConfig === 'function') {
|
||||||
merge(programmaticOptions, compilationConfig(source, fileId));
|
merge(programmaticOptions, compilationConfig(source, fileId, compileOptions));
|
||||||
} else if (compilationConfig) {
|
} else if (compilationConfig) {
|
||||||
merge(programmaticOptions, compilationConfig);
|
merge(programmaticOptions, compilationConfig);
|
||||||
}
|
}
|
||||||
|
|
@ -180,14 +178,6 @@ const compilationPlugin = (options: Options): UnpluginOptions => {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
interface GetJsxTransformOptions {
|
|
||||||
rootDir: string;
|
|
||||||
mode: Options['mode'];
|
|
||||||
suffix?: JSXSuffix;
|
|
||||||
fastRefresh: boolean;
|
|
||||||
polyfill: Config['polyfill'];
|
|
||||||
enableEnv: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getJsxTransformOptions({
|
export function getJsxTransformOptions({
|
||||||
suffix,
|
suffix,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue