Substituição de variáveis globais
O transformador Oxc pode substituir variáveis globais.
Define
O recurso “Define” troca globais por expressões constantes. Semelhante a global_defs no Terser e à opção define do esbuild.
// entrada
const foo = __DEV__ ? 1 : 2;
// saída
const foo = 1;// Exemplo
import { transform } from "oxc-transform";
const result = await transform("lib.js", sourceCode, {
define: {
__DEV__: "true",
},
});Cada entrada de define associa uma expressão a uma string que contém código de expressão. As chaves precisam ser um identificador (ex.: __DEV__) ou uma sequência pontilhada (process.env.NODE_ENV, import.meta.env.MODE). Os valores precisam ser expressões válidas.
Sempre coloque valores entre aspas no JS
Os valores de define são strings de expressões. Se quiser literal de string, use aspas extras (ex.: __MODE__: '"development"' ou JSON.stringify("development")).
Referência de objeto não é compartilhada
Diferente do esbuild, ao passar um objeto como valor da opção define, a mesma referência não é compartilhada entre pontos do código — alterações em um lado não aparecem no outro.
const foo = __OBJECT__;
foo.bar = 1;
console.log(foo.bar); // 1
const bar = __OBJECT__;
console.log(foo.bar); // undefined// Exemplo
import { transform } from "oxc-transform";
const result = await transform("lib.js", sourceCode, {
define: {
__OBJECT__: "{}",
},
});Inject
“Inject” substitui globais por import de um módulo. Semelhante à opção inject do esbuild e ao @rollup/plugin-inject.
// entrada
const foo = new Promise((resolve) => resolve(1));
// saída
import { Promise as P } from "es6-promise";
const foo = new P((resolve) => resolve(1));// Exemplo
import { transform } from "oxc-transform";
const result = await transform("lib.js", sourceCode, {
inject: {
P: ["es6-promise", "Promise"],
},
});Cada entrada de inject mapeia uma expressão para um identificador importado. Chaves: identificador ou sequência pontilhada. Valores: string da origem do import, ou tupla [origem, nome] (* para importação de namespace).
const examples = {
// import { Promise } from 'es6-promise'
Promise: ["es6-promise", "Promise"],
// import { Promise as P } from 'es6-promise'
P: ["es6-promise", "Promise"],
// import $ from 'jquery'
$: "jquery",
// import * as fs from 'fs'
fs: ["fs", "*"],
// usar módulo local em vez de terceiro
"Object.assign": path.resolve("src/helpers/object-assign.js"),
};