Skip to content
文档
使用
@swc/core

@swc/core

这些是主要对构建工具作者有用的核心 SWC API。

transform

@swc/core 提供了适当的 .d.ts 文件,因此你可能不需要此文件。返回 Promise<{ code: string, map?: string }>

const swc = require("@swc/core");
 
swc
  .transform("source code", {
    // 以下选项不能在 .swcrc 中指定
    filename: "input.js",
    sourceMaps: true,
    // 输入文件默认被视为模块
    isModule: false,
 
    // 以下选项可以通过 .swcrc 配置
    jsc: {
      parser: {
        syntax: "ecmascript",
      },
      transform: {},
    },
  })
  .then((output) => {
    output.code; // 转换后的代码
    output.map; // source map(以字符串表示)
  });

transformSync

Returns { code: string, map?: string }

transformFile

Returns Promise<{ code: string, map?: string }>

transformFileSync

Returns { code: string, map?: string }

parse

Returns Promise<Script | Module>

const swc = require('@swc/core')
 
swc
  .parse("source code", {
    syntax: "ecmascript", // "ecmascript" | "typescript"
    comments: false,
    script: true,
 
    // 默认值为 es3
    target: "es3",
 
    // 输入源代码默认被视为模块
    isModule: false,
  })
  .then((module) => {
    module.type // 文件类型
    module.body; // AST
  })
Type Declarations
export declare function parse(src: string, options: ParseOptions & {
    isModule: false;
}): Promise<Script>;
export declare function parse(src: string, options?: ParseOptions): Promise<Module>;
export declare function parseSync(src: string, options: ParseOptions & {
    isModule: false;
}): Script;
export declare function parseSync(src: string, options?: ParseOptions): Module;
export declare function parseFile(path: string, options: ParseOptions & {
    isModule: false;
}): Promise<Script>;
export declare function parseFile(path: string, options?: ParseOptions): Promise<Module>;
export declare function parseFileSync(path: string, options: ParseOptions & {
    isModule: false;
}): Script;
export declare function parseFileSync(path: string, options?: ParseOptions): Module;
 
export interface Module extends Node, HasSpan, HasInterpreter {
    type: "Module";
    body: ModuleItem[];
}
export interface Script extends Node, HasSpan, HasInterpreter {
    type: "Script";
    body: Statement[];
}
export declare type ParseOptions = ParserConfig & {
  comments?: boolean;
  script?: boolean;
  /**
   * 默认值为 es3.
   */
  target?: JscTarget;
};
export declare type JscTarget = "es3" | "es5" | "es2015" | "es2016" | "es2017" | "es2018" | "es2019" | "es2020" | "es2021" | "es2022";
export declare type ParserConfig = TsParserConfig | EsParserConfig;
export interface TsParserConfig {
    syntax: "typescript";
    /**
     * 默认值为 `false`.
     */
    tsx?: boolean;
    /**
     * 默认值为 `false`.
     */
    decorators?: boolean;
    /**
     * 默认值为 `false`
     */
    dynamicImport?: boolean;
}
export interface EsParserConfig {
    syntax: "ecmascript";
    /**
     * 默认值为 false.
     */
    jsx?: boolean;
    /**
     * 默认值为 `false`
     */
    functionBind?: boolean;
    /**
     * 默认值为 `false`
     */
    decorators?: boolean;
    /**
     * 默认值为 `false`
     */
    decoratorsBeforeExport?: boolean;
    /**
     * 默认值为 `false`
     */
    exportDefaultFrom?: boolean;
    /**
     * 默认值为 `false`
     */
    importAssertions?: boolean;
}

parseSync

Returns Script | Module

parseFile

Returns Promise<Script | Module>

parseFileSync

Returns Script | Module

minify

Returns Promise<Output>

const swc = require('@swc/core')
 
swc
  .minify('source code', opts?: JsMinifyOptions)
  .then(output => {
    output.code // 转换后的代码
    output.map // 源映射(以字符串表示)
  })
Type Declarations
export declare function minify(src: string, opts?: JsMinifyOptions): Promise<Output>;
export declare function minifySync(src: string, opts?: JsMinifyOptions): Output;
 
export interface Output {
    code: string;
    map?: string;
}
export declare type TerserEcmaVersion = 5 | 2015 | 2016 | string | number;
export interface JsMinifyOptions {
    compress?: TerserCompressOptions | boolean;
    mangle?: TerserMangleOptions | boolean;
    ecma?: TerserEcmaVersion;
    keep_classnames?: boolean;
    keep_fnames?: boolean;
    module?: boolean | "unknown";
    safari10?: boolean;
    toplevel?: boolean;
    sourceMap?: boolean;
    outputPath?: string;
    inlineSourcesContent?: boolean;
}
export interface TerserCompressOptions {
    arguments?: boolean;
    arrows?: boolean;
    booleans?: boolean;
    booleans_as_integers?: boolean;
    collapse_vars?: boolean;
    comparisons?: boolean;
    computed_props?: boolean;
    conditionals?: boolean;
    dead_code?: boolean;
    defaults?: boolean;
    directives?: boolean;
    drop_console?: boolean;
    drop_debugger?: boolean;
    ecma?: TerserEcmaVersion;
    evaluate?: boolean;
    expression?: boolean;
    global_defs?: any;
    hoist_funs?: boolean;
    hoist_props?: boolean;
    hoist_vars?: boolean;
    ie8?: boolean;
    if_return?: boolean;
    inline?: 0 | 1 | 2 | 3;
    join_vars?: boolean;
    keep_classnames?: boolean;
    keep_fargs?: boolean;
    keep_fnames?: boolean;
    keep_infinity?: boolean;
    loops?: boolean;
    negate_iife?: boolean;
    passes?: number;
    properties?: boolean;
    pure_getters?: any;
    pure_funcs?: string[];
    reduce_funcs?: boolean;
    reduce_vars?: boolean;
    sequences?: any;
    side_effects?: boolean;
    switches?: boolean;
    top_retain?: any;
    toplevel?: any;
    typeofs?: boolean;
    unsafe_passes?: boolean;
    unsafe_arrows?: boolean;
    unsafe_comps?: boolean;
    unsafe_function?: boolean;
    unsafe_math?: boolean;
    unsafe_symbols?: boolean;
    unsafe_methods?: boolean;
    unsafe_proto?: boolean;
    unsafe_regexp?: boolean;
    unsafe_undefined?: boolean;
    unused?: boolean;
    module?: boolean;
}
export interface TerserMangleOptions {
    props?: TerserManglePropertiesOptions;
    top_level?: boolean;
    keep_class_names?: boolean;
    keep_fn_names?: boolean;
    keep_private_props?: boolean;
    ie8?: boolean;
    safari10?: boolean;
    reserved?: string[];
}
export interface TerserManglePropertiesOptions {
}

minifySync

Returns Output

Options

/**
* 编程选项。
*/
interface Options extends Config {
  /**
  * 如果为 true,文件将被解析为脚本而不是模块。
  */
  script?: boolean;
  /**
  * 所有编程选项中的路径将相对于此工作目录进行解析。
  * 默认为 `process.cwd()`。
  *
  cwd?: string;
  */
    cwd?: string;
  调用者?: CallerOptions;
  /** 与当前正在编译的代码关联的文件名,
  * 如果有的话。文件名是可选的,但并非所有 Swc 的
  * 功能在文件名未知时都可用,因为
  * 一部分选项依赖于文件名来实现其功能。
  *
  * 用户可能会遇到的三种主要情况是:
  *
  * - 文件名会暴露给插件。某些插件可能需要
  * 文件名的存在。
  * - 像 "test"、"exclude" 和 "ignore" 这样的选项需要文件名
  * 来进行字符串/正则表达式匹配。
  * - .swcrc 文件相对于正在编译的文件加载。
  * 如果省略此选项,Swc 将表现为已设置 swcrc: false。
  */
  filename?: string;
  /**
  * 初始路径将根据 "rootMode" 进行处理,以确定当前 Swc 项目的概念根文件夹。
  * 这主要用于两种情况:
  * - 检查默认 "configFile" 值时的基本目录
  *
  * - "swcrcRoots" 的默认值。
  * 默认为 `opts.cwd`
  *
  root?: string;
  */
    root?: string;
  /**
  * 此选项与“root”值结合,定义了 Swc 如何选择
  * 其项目根目录。不同的模式定义了 Swc 处理“root”值以获取最终项目根目录的不同方式。
  * 可以处理“root”值以获取最终项目根目录。
  *
  * “root” - 将“root”值原封不动地传递。
  * “upward” - 从“root”目录向上遍历,寻找包含 swc.config.js 文件的目录,如果未找到 swc.config.js 文件,则抛出错误。
  * 包含 swc.config.js 文件的目录,如果未找到 swc.config.js 文件,则抛出错误。
  * 如果未找到 swc.config.js 文件,则抛出错误。
  * “upward-optional” - 从“root”目录向上遍历,寻找包含 swc.config.js 文件的目录,如果未找到 swc.config.js 文件,则回退到“root”。
  * 包含 swc.config.js 文件的目录,如果未找到 swc.config.js 文件,则回退到“root”。
  * 如果未找到 swc.config.js 文件,则回退到“root”。
  *
  *
  * "root" 是默认模式,因为它避免了 Swc 意外加载完全在当前项目文件夹之外的 swc.config.js 的风险。
  * 会意外加载完全在当前项目文件夹之外的 swc.config.js。
  * 如果你使用 "upward-optional",
  * 请注意它会遍历目录结构一直到文件系统的根目录,
  * 并且总是有可能有人在他们的主目录中有一个被遗忘的 swc.config.js,
  * 这可能会导致你的构建中出现意外的错误。
  * 对于在单仓库项目结构中按包运行构建/测试的用户,
  *
  *
  * 可能希望使用 "upward",因为单仓库通常在项目根目录中有一个 swc.config.js。
  * 在项目根目录中运行 Swc
    * often have a swc.config.js in the project root. Running Swc
  * 在没有“upward”的 monorepo 子目录中,将导致 Swc
  * 跳过加载项目根目录中的任何 swc.config.js 文件,
  * 这可能导致意外的错误和编译失败。
  */
  rootMode?: "root" | "upward" | "upward-optional";
  /**
  * 在配置加载期间使用的当前活动环境。
  * 该值在解析“env”配置时用作键,
  * 并且通过 api.env() 函数在配置函数、插件和预设中也可用。
  * 默认值为 `process.env.SWC_ENV || process.env.NODE_ENV || "development"`
  *
  envName?: string;
  */
    envName?: string;
  /**
  * 默认搜索默认的 `.swcrc` 文件,但可以
  * 传递任何 JS 或 JSON5 配置文件的路径。
  *
  *
  * 注意:此选项不会影响 `.swcrc` 文件的加载,
  * 因此虽然可能想使用 configFile: "./foo/.swcrc",
  * 但不推荐这样做。如果给定的 `.swcrc` 通过
  * 标准的文件相对逻辑加载,你最终会加载相同的
  * 配置文件两次,并将其与自身合并。如果你正在链接
  * 一个特定的配置文件,建议坚持使用
  * 与 "swcrc" 名称无关的命名方案。
  *
  * 默认为 `path.resolve(opts.root, ".swcrc")`
  */
  configFile?: string | boolean;
  /**
  * true 将启用相对于提供给 Swc 的 "filename" 搜索配置文件。
  *
  * 在编程选项中传递的 swcrc 值将覆盖配置文件中设置的值。
  *
  * 注意:只有在当前 "filename" 位于与 "swcrcRoots" 包匹配的包内时,才会加载 .swcrc 文件。
  * 只要指定了 filename 选项,默认值为 true。
  *
  *
  swcrc?: boolean;
  */
  * 默认情况下,Babel 只会在 "root" 包中搜索 .babelrc 文件。
  /**
  * 因为否则 Babel 无法知道给定的 .babelrc 是否应该被加载,
  * 或者它的 "plugins" 和 "presets" 是否已经安装,因为文件
    *  or if it's "plugins" and "presets" have even been installed, since the file
  * 编译的内容可能在 node_modules 中,或者已经被符号链接到项目中。
  *
  *
  * 此选项允许用户提供其他包的列表,这些包在考虑是否加载 .babelrc 文件时应被视为“根”包。
  * 例如,一个希望允许各个包拥有自己配置的单仓库设置可能希望这样做。
  *
  *
  * 默认为 `opts.root`
  swcrcRoots?: boolean | MatchPattern | MatchPattern[];
  *
  *
  *
  * `true` 将尝试从文件本身加载输入源映射,如果它包含 //# sourceMappingURL=... 注释。如果未找到映射,或者映射加载和解析失败,它将被静默丢弃。
  */
    swcrcRoots?: boolean | MatchPattern | MatchPattern[];
  /**
     * `true` will attempt to load an input sourcemap from the file itself, if it
     * contains a //# sourceMappingURL=... comment. If no map is found, or the
     * map fails to load and parse, it will be silently discarded.
  *
  * 如果提供了一个对象,它将被视为源映射对象本身。
  *
  * 默认为 `true`。
  */
  inputSourceMap?: boolean | string;
  /**
  * 用于源映射对象中文件的名称。
  *
  * 默认为 `path.basename(opts.filenameRelative)`(如果可用),否则为 `"unknown"`。
  */
  sourceFileName?: string;
  /**
  * 要在生成的源映射中设置的 sourceRoot 字段(如果需要)。
  */
  sourceRoot?: string;
  plugin?: Plugin;
  isModule?: boolean | 'unknown';
  /**
  * 目标路径。请注意,此值仅用于修复源路径
  * 源映射文件的路径,swc 不会将输出写入此路径。
  */
  outputPath?: string;
}

其中 Config 定义为:

export interface Config {
  /**
  * 注意:类型为字符串,因为它遵循 Rust 的正则表达式语法。
  */
  test?: string | string[];
  /**
  * 注意:类型为字符串,因为它遵循 Rust 的正则表达式语法。
  */
  排除?: 字符串 | 字符串[];
  环境?: 环境配置;
  jsc?: Jsc 配置;
  模块?: 模块配置;
  压缩?: 布尔值;
  /**
  * - true 为代码生成源映射并将其包含在结果对象中。
  * - "inline" 生成源映射并将其作为数据 URL 附加到代码末尾,但不包含在结果对象中。
  *
  * `swc-cli` 重载了其中一些选项,以影响映射如何写入磁盘:
  *
  * - true 会将地图写入磁盘上的 .map 文件
  * - "inline" 会直接写入文件,因此它将包含一个包含地图的 data:
  * - 注意:这些选项有点奇怪,所以可能最有意义的是直接使用 true
  *  并根据您的用例在您自己的代码中处理其余部分。
  */
  sourceMaps?: boolean | "inline";
  inlineSourcesContent?: boolean;
}