전역 변수 치환
Oxc 트랜스포머는 전역 변수를 치환할 수 있습니다.
Define
Define 기능은 전역 변수를 상수 표현식으로 바꿉니다. Terser의 global_defs 및 esbuild의 define과 비슷합니다.
// input
const foo = __DEV__ ? 1 : 2;
// output
const foo = 1;// Example
import { transform } from "oxc-transform";
const result = await transform("lib.js", sourceCode, {
define: {
__DEV__: "true",
},
});각 define 항목은 표현식을 표현식 코드 문자열에 매핑합니다. 키는 식별자(예: __DEV__)이거나 점으로 이어진 식별자(예: process.env.NODE_ENV, import.meta.env.MODE)여야 합니다. 값은 유효한 표현식이어야 합니다.
값은 항상 따옴표로 감싸기
define의 값은 표현식 문자열입니다. 따라서 항상 문자열 타입이어야 합니다. 문자열 리터럴을 의미하면 따옴표를 이스케이프해 넣습니다(예: __MODE__: '"development"', __MODE__: JSON.stringify("development")).
객체 참조는 공유되지 않음
esbuild와 달리 define 값으로 객체를 넘기면 객체 참조가 공유되지 않습니다. 한쪽에서 객체를 바꿔도 다른 곳에 반영되지 않습니다.
const foo = __OBJECT__;
foo.bar = 1;
console.log(foo.bar); // 1
const bar = __OBJECT__;
console.log(foo.bar); // undefined// Example
import { transform } from "oxc-transform";
const result = await transform("lib.js", sourceCode, {
define: {
__OBJECT__: "{}",
},
});Inject
Inject 기능은 전역 변수를 모듈에서 가져온 식별자로 바꿉니다. esbuild의 inject 및 @rollup/plugin-inject와 비슷합니다.
// input
const foo = new Promise((resolve) => resolve(1));
// output
import { Promise as P } from "es6-promise";
const foo = new P((resolve) => resolve(1));// Example
import { transform } from "oxc-transform";
const result = await transform("lib.js", sourceCode, {
inject: {
P: ["es6-promise", "Promise"],
},
});각 inject 항목은 표현식을 가져온 식별자에 매핑합니다. 키는 식별자(예: __DEV__)이거나 점으로 이어진 식별자(예: process.env.NODE_ENV)여야 합니다. 값은 import 출처 문자열이거나, 출처와 import 이름의 튜플(*는 네임스페이스 import)이어야 합니다.
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", "*"],
// 써드파티 대신 로컬 모듈 사용
"Object.assign": path.resolve("src/helpers/object-assign.js"),
};