グローバル変数の置換
Oxc transformer はグローバル変数の置換をサポートしています。
定義
"定義" 機能により、グローバル変数を定数式で置換する方法が提供されます。この機能は Terser の global_defs オプションや esbuild の define オプション に類似しています。
// 入力
const foo = __DEV__ ? 1 : 2;
// 出力
const foo = 1;// 例
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// 例
import { transform } from "oxc-transform";
const result = await transform("lib.js", sourceCode, {
define: {
__OBJECT__: "{}",
},
});インジェクト
"インジェクト" 機能により、モジュールからのインポートでグローバル変数を置換する方法が提供されます。この機能は esbuild の inject オプション および @rollup/plugin-inject に類似しています。
// 入力
const foo = new Promise((resolve) => resolve(1));
// 出力
import { Promise as P } from "es6-promise";
const foo = new P((resolve) => resolve(1));// 例
import { transform } from "oxc-transform";
const result = await transform("lib.js", sourceCode, {
inject: {
P: ["es6-promise", "Promise"],
},
});inject の各エントリは、式をインポートされた識別子にマッピングします。キーは識別子(例:__DEV__)または識別子のドット区切りのシーケンス(例:process.env.NODE_ENV)である必要があります。値はインポート元の文字列、またはインポート元とインポート名の文字列タプル(* は名前空間インポート)である必要があります。
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"),
};