トランスフォーマー

トランスフォーマープラグインは、単一のアセットを変換してコンパイルしたり、依存関係を検出したり、異なる形式に変換したりします。多くのトランスフォーマーは、コンパイラーやプリプロセッサーなどの他のツールのラッパーであり、それらをParcelと統合する役割を担っています。

アセットの変換

#

Transformerコンストラクターに渡す必要のある必須関数が1つあります。それがtransformです。この関数は、ファイルを表すMutableAssetオブジェクトを受け取ります。アセットのソースコードまたはコンテンツは、関連するソースマップ(下記参照)とともに取得できます。トランスフォーマーは、このコンテンツを何らかの方法で変換し、コンパイルされた結果をアセットに設定できます。

import {Transformer} from '@parcel/plugin';

export default new Transformer({
async transform({asset}) {
// Retrieve the asset's source code and source map.
let source = await asset.getCode();
let sourceMap = await asset.getMap();

// Run it through some compiler, and set the results
// on the asset.
let {code, map} = compile(source, sourceMap);
asset.setCode(code);
asset.setMap(map);

// Return the asset
return [asset];
}
});

設定の読み込み

#

ユーザーのプロジェクトから設定を読み込むには、トランスフォーマープラグインのloadConfigメソッドで行う必要があります。詳細については、設定の読み込みを参照してください。

:キャッシュを適切に無効化できるように、Parcelの設定読み込みメカニズムを使用することが重要です。ファイルシステムからファイルを直接読み込まないでください。

アセットタイプの変更

#

トランスフォーマーは、アセットをある形式から別の形式に変換できます。たとえば、TypeScriptからJavaScriptに変換できます。これを行うには、アセットのtypeプロパティを新しいファイルタイプ(例:js)に設定します。その後、アセットは新しいタイプに一致するパイプラインによって処理されます。詳細については、Parcel設定ドキュメントのトランスフォーマーを参照してください。

import {Transformer} from '@parcel/plugin';

export default new Transformer({
async transform({asset}) {
let code = await asset.getCode();

let result = compile(code);
asset.type = 'js';
asset.setCode(result);

return [asset];
}
});

環境

#

アセットは、アセットをどのようにコンパイルする必要があるかを記述するEnvironmentに関連付けられています。同じアセットが、最新のターゲットとレガシーターゲットのビルドなど、異なる環境で複数回処理される場合があります。可能であれば、トランスフォーマープラグインは、結果がターゲットで動作し、最適化されるように、コードをコンパイルするときに環境を考慮する必要があります。詳細については、ターゲットを参照してください。

import {Transformer} from '@parcel/plugin';

export default new Transformer({
async transform({asset}) {
let code = await asset.getCode();

let result = asset.env.isBrowser()
? compileForBrowser(code, asset.engines.browser)
: compileForNode(code, asset.engines.node);

asset.setCode(result);
return [asset];
}
});

利用可能なプロパティの詳細については、Environment APIドキュメントを参照してください。

依存関係の追加

#

アセットのコンテンツを変換することに加えて、トランスフォーマープラグインは、Parcelによって処理される可能性のあるコード内の依存関係を検出する役割も担っています。一部のトランスフォーマーは、別のトランスフォーマーが後で実行してそれを行うため(たとえば、デフォルトのJavaScriptトランスフォーマー)、この点を気にする必要はありません。Parcelでサポートされている既存の言語のいずれにもコンパイルされない新しい言語のサポートを追加する場合、またはコンパイルされたコードの外部に依存関係を導入する場合は、それらをアセットに追加する必要があります。

依存関係は、DependencyOptionsオブジェクトを渡すaddDependencyメソッドを使用してアセットに追加できます。必須パラメーターは2つあります。依存関係の場所を記述する文字列であるspecifierと、指定子をどのように解釈する必要があるかを記述するspecifierTypeです。詳細については、依存関係解決を参照してください。

import {Transformer} from '@parcel/plugin';

export default new Transformer({
async transform({asset}) {
let code = await asset.getCode();
let deps = code.matchAll(/import "(.*?)"/g);

for (let dep of deps) {
asset.addDependency({
specifier: dep,
specifierType: 'esm'
});
}

return [asset];
}
});

バンドルへの影響

#

依存関係が指定される方法は、それがどのようにバンドルされるかに影響を与える可能性があります。デフォルトでは、依存関係は同じ出力ファイルにまとめてバンドルされます。依存関係のpriorityプロパティは、依存しているアセットと並行して、または遅延ロードする必要があることを指定できます。たとえば、JavaScriptの動的なimport()は、lazy優先度で依存関係をロードします。詳細については、コード分割を参照してください。

bundleBehaviorプロパティは、依存関係がどのようにバンドルされるかをさらに制御します。たとえば、bundleBehaviorinlineに設定することで、依存関係を新しいバンドルに分離できますが、親にインライン化できます。詳細については、バンドルインライン化を参照してください。

利用可能な各オプションの詳細については、DependencyOptionsを参照してください。

URL依存関係

#

一部の言語では、依存関係はURLで他のファイルを参照します。コンパイルされたコードでは、これらのURL参照を更新して、最終的なバンドル名を指すようにする必要があります。ただし、アセットが変換されている場合、バンドル名はまだわかっていません。

addDependencyは一意の依存関係IDを返します。これは、最終的なバンドルURLのプレースホルダーとして変換されたアセットコンテンツに配置でき、URLがわかると、後でパケージャーによって置き換えられます。

ショートカットとして、addURLDependencyメソッドは、specifierTypeurlに設定され、prioritylazyに設定された(別のバンドルを作成する)依存関係を作成します。

import {Transformer} from '@parcel/plugin';

export default new Transformer({
async transform({asset}) {
let code = await asset.getCode();
let result = code.replace(/import "(.*?)"/g, (m, dep) => {
// Replace the original specifier with a dependency id
// as a placeholder. This will be replaced later with
// the final bundle URL.
let depId = asset.addURLDependency(dep);
return `import "${depId}"`;
});

asset.setCode(result);
return [asset];
}
});

ASTの再利用

#

複数のトランスフォーマープラグインがアセットに対して連続して実行される場合、同じ解析済みASTを再利用できる場合は、各トランスフォーマーに対して解析、変換、およびコード生成を行うのは無駄です。Parcelは、transform関数をいくつかの部分に分割することで、ASTの共有を容易にします。

import {Transformer} from '@parcel/plugin';
import semver from 'semver';

export default new Transformer({
async canReuseAST({ast}) {
return ast.type === 'my-compiler'
&& semver.satisfies(ast.version, '^1.0.0');
},
async parse({asset}) {
return {
type: 'my-compiler',
version: '1.0.0',
program: parse(await asset.getCode())
};
},
async transform({asset}) {
let ast = await asset.getAST();

let compiledAST = compile(ast.program);
asset.setAST({
type: 'my-compiler',
version: '1.0.0',
program: compiledAST
});

return [asset];
},
async generate({ast}) {
let {content, map} = generate(ast.program);
return {
content,
map
};
}
});

ソースマップ

#

ソースマップは、コンパイルされたコードとバンドルされたコードの場所を元のソースコードにマッピングすることにより、ブラウザーでコンパイルされたコードをデバッグする際に開発者を支援します。トランスフォーマープラグインは、可能であれば、コンテンツを変換するときにソースマップをアセットに追加する必要があります。アセットは複数のトランスフォーマーによって処理される可能性があるため、コンテンツに加えて、アセットに含まれる既存のソースマップも変換する必要があります。

Parcelは、ソースマップ操作に@parcel/source-mapライブラリを使用します。使用方法の詳細については、ソースマップを参照してください。他のツールとの間で受け渡しするソースマップを変換する必要がある場合があります。

import {Transformer} from '@parcel/plugin';
import SourceMap from '@parcel/source-map';

export default new Transformer({
async transform({asset, options}) {
let source = await asset.getCode();
let sourceMap = await asset.getMap();

// Convert the input source map to JSON.
let result = compile(source, sourceMap.toVLQ());
asset.setCode(result.code);

// Convert returned JSON source map to a Parcel SourceMap.
let map = new SourceMap(options.projectRoot);
map.addVLQMap(result.map);
asset.setMap(map);

return [asset];
}
});

バイナリデータ

#

トランスフォーマーは、テキスト形式のソースコードに加えて、バイナリコンテンツも処理できます。これは、Bufferを使用するか、ストリームを使用することによって行うことができます。

import {Transformer} from '@parcel/plugin';

export default new Transformer({
async transform({asset}) {
let buffer = await asset.getBuffer();

let result = transform(buffer);
asset.setBuffer(result);

return [asset];
}
});

クエリパラメーター

#

アセットは、クエリパラメーター付きの依存関係によって参照される場合があります。これらは、アセットのコンパイルまたは変換時にトランスフォーマーが使用するオプションを指定します。たとえば、Parcelの画像トランスフォーマーは、クエリパラメーターを使用して、ユーザーが画像を変換する幅、高さ、形式を指定できるようにします。同じアセットを、異なるクエリパラメーターを使用して複数回コンパイルできます。

import {Transformer} from '@parcel/plugin';

export default new Transformer({
async transform({asset}) {
let buffer = await asset.getBuffer();

let result = resize(
buffer,
asset.query.width,
asset.query.height
);

asset.setBuffer(result);
return [asset];
}
});

複数のアセットの返却

#

ここまでのすべての例では、単一のアセットを変換する方法を示しました。ただし、場合によっては、1つのファイルに複数の異なるアセットが含まれる場合があります。たとえば、HTMLには、独自の個別のParcelパイプラインを介して処理する必要のあるインラインの<script>および<style>要素があります。このため、Parcelでは、トランスフォーマーから複数のアセットを返すことができます。

新しいアセットを作成するには、TransformerResult オブジェクトの配列を返します。これらのオブジェクトは typecontent を持つ必要がありますが、自身に依存関係を持たせたり、Asset オブジェクトと同じオプションを多く持たせたりすることもできます。

通常、元のアセットに加えて、それが持つ可能性のあるすべての子アセットを返す必要があります。親は、子アセットに uniqueKey プロパティを割り当て、それを依存関係の specifier として参照することで、子アセットに対する依存関係を作成できます。これにより、ファイルシステムには実際には存在しないが、存在するかのように参照できる「仮想」アセットを作成できます。

import {Transformer} from '@parcel/plugin';

export default new Transformer({
async transform({asset}) {
let code = await asset.getCode();

// Extract inline assets to return in addition to this asset.
let assets = [asset];

let uniqueKey = `${asset.id}-style`;
assets.push({
type: 'css',
content: '...',
uniqueKey,
bundleBehavior: 'inline'
});

// Add a dependency, using the uniqueKey as a specifier.
asset.addDependency({
specifier: uniqueKey,
specifierType: 'esm'
});

return assets;
}
});

関連するAPI

#

DependencyOptions parcel/packages/core/types/index.js:476

Dependency を作成する際に使用します。そちらを参照してください。

type DependencyOptions = {|
  +specifier: DependencySpecifier,

依存関係を解決するために使用される指定子。

  +specifierType: SpecifierType,

指定子がどのように解釈されるべきか。

  • esm: ESモジュール指定子。URLとして解析されますが、裸の指定子はnode_modulesとして扱われます。
  • commonjs: CommonJS指定子。URLとして解析されません。
  • url: ブラウザで機能するURL。裸の指定子は相対URLとして扱われます。
  • custom: カスタム指定子。カスタムリゾルバープラグインで処理する必要があります。
  +priority?: DependencyPriority,

依存関係をいつロードするか。

  • sync: 依存関係は同期的に解決できる必要があります。解決されたアセットは、親と同じバンドル、またはページに既にある別のバンドルに配置されます。
  • parallel: 依存関係は、現在のバンドルと並行してロードされる別のバンドルに配置されます。
  • lazy: 依存関係は、後でロードされる別のバンドルに配置されます。

デフォルト値: 'sync'

  +bundleBehavior?: BundleBehavior,

解決されたアセットが配置されるバンドルの動作を制御します。バンドルがいつロードされるかを決定するために priority と組み合わせて使用します。

  • inline: 解決されたアセットは、新しいインラインバンドルに配置されます。インラインバンドルは、別のファイルには書き込まれず、親バンドルに埋め込まれます。
  • isolated: 解決されたアセットは、別のバンドルで親から分離されます。共有アセットは複製されます。
  +needsStableName?: boolean,

依存関係がバンドルエントリ(priorityが"parallel"または"lazy"の場合)である場合、これはそのバンドルの命名を制御します。needsStableNameは、バンドルの内容が変更された場合でも、名前が時間の経過とともに安定している必要があることを示します。これは、ユーザーが手動でURLを入力するエントリや、サービスワーカーやRSSフィードなど、URLが時間の経過とともに一貫性を保つ必要がある場合に役立ちます。

  +isOptional?: boolean,

依存関係がオプションかどうか。依存関係を解決できない場合、ビルドは失敗しません。

  +loc?: SourceLocation,

依存関係が見つかったソースファイル内の場所。

  +env?: EnvironmentOptions,

依存関係の環境。

  +packageConditions?: Array<string>,

package.jsonの"exports"と"imports"を解決するときに使用するカスタム条件のリスト。これは、環境からの条件と組み合わされます。ただし、specifierTypeから推論されるデフォルトの"import"および"require"条件を上書きします。カスタム条件に加えてそれらを含めるには、このリストに明示的に追加します。

  +meta?: Meta,

依存関係のプラグイン固有のメタデータ。

  +pipeline?: string,

.parcelrcで定義されている、依存関係を処理する必要があるパイプライン。

  +resolveFrom?: FilePath,

依存関係の解決元となるファイルパス。デフォルトでは、これは依存関係が指定されたソースファイルのパスです。

  +range?: SemverRange,

依存関係に期待されるsemverバージョン範囲。

  +symbols?: $ReadOnlyMap<Symbol, {|
    local: Symbol,
    loc: ?SourceLocation,
    isWeak: boolean,
    meta?: Meta,
  |}>,

ソースファイルが依存している、解決されたモジュール内のシンボル。

|}
参照元
MutableAsset, TransformerResult

Dependency parcel/packages/core/types/index.js:551

Dependency は、2つのアセット間の接続を示します(インポートされた側からの何らかの効果が期待されます。副作用であろうと値がインポートされているのであろうと)。

interface Dependency {
  +id: string,

依存関係のID。

  +specifier: DependencySpecifier,

依存関係を解決するために使用される指定子。

  +specifierType: SpecifierType,

指定子がどのように解釈されるべきか。

  • esm: ESモジュール指定子。URLとして解析されますが、裸の指定子はnode_modulesとして扱われます。
  • commonjs: CommonJS指定子。URLとして解析されません。
  • url: ブラウザで機能するURL。裸の指定子は相対URLとして扱われます。
  • custom: カスタム指定子。カスタムリゾルバープラグインで処理する必要があります。
  +priority: DependencyPriority,

依存関係をいつロードするか。

  • sync: 依存関係は同期的に解決できる必要があります。解決されたアセットは、親と同じバンドル、またはページに既にある別のバンドルに配置されます。
  • parallel: 依存関係は、現在のバンドルと並行してロードされる別のバンドルに配置されます。
  • lazy: 依存関係は、後でロードされる別のバンドルに配置されます。

デフォルト値: 'sync'

  +bundleBehavior: ?BundleBehavior,

解決されたアセットが配置されるバンドルの動作を制御します。バンドルがいつロードされるかを決定するために priority と組み合わせて使用します。

  • inline: 解決されたアセットは、新しいインラインバンドルに配置されます。インラインバンドルは、別のファイルには書き込まれず、親バンドルに埋め込まれます。
  • isolated: 解決されたアセットは、別のバンドルで親から分離されます。共有アセットは複製されます。
  +needsStableName: boolean,

依存関係がバンドルエントリ(priorityが"parallel"または"lazy"の場合)である場合、これはそのバンドルの命名を制御します。needsStableNameは、バンドルの内容が変更された場合でも、名前が時間の経過とともに安定している必要があることを示します。これは、ユーザーが手動でURLを入力するエントリや、サービスワーカーやRSSフィードなど、URLが時間の経過とともに一貫性を保つ必要がある場合に役立ちます。

  +isOptional: boolean,

依存関係がオプションかどうか。依存関係を解決できない場合、ビルドは失敗しません。

  +isEntry: boolean,

依存関係がエントリかどうか。

  +loc: ?SourceLocation,

依存関係が見つかったソースファイル内の場所。

  +env: Environment,

依存関係の環境。

  +packageConditions: ?Array<string>,

package.jsonの"exports"と"imports"を解決するときに使用するカスタム条件のリスト。これは、環境からの条件と組み合わされます。ただし、specifierTypeから推論されるデフォルトの"import"および"require"条件を上書きします。カスタム条件に加えてそれらを含めるには、このリストに明示的に追加します。

  +meta: Meta,

依存関係のプラグイン固有のメタデータ。

  +target: ?Target,

これがエントリの場合、これはそのエントリに関連付けられているターゲットです。

  +sourceAssetId: ?string,

この依存関係を持つアセットのID。

  +sourcePath: ?FilePath,

この依存関係を持つアセットのファイルパス。

  +sourceAssetType: ?string,

この依存関係を参照したアセットのタイプ。

  +resolveFrom: ?FilePath,

依存関係の解決元となるファイルパス。デフォルトでは、これは依存関係が指定されたソースファイルのパスです。

  +range: ?SemverRange,

依存関係に期待されるsemverバージョン範囲。

  +pipeline: ?string,

.parcelrcで定義されている、依存関係を処理する必要があるパイプライン。

  +symbols: MutableDependencySymbols,
}
参照元
BaseAsset, Bundle, BundleGraph, BundleGraphTraversable, BundleTraversable, DependencyOptions, DependencySpecifier, MutableBundleGraph, Resolver, ResolvingProgressEvent, RuntimeAsset

ASTGenerator parcel/packages/core/types/index.js:639

type ASTGenerator = {|
  type: string,
  version: Semver,
|}
参照元
BaseAsset

BaseAsset parcel/packages/core/types/index.js:652

アセットは、ファイルまたはファイルの一部を表します。ソースコード、バイナリデータなど、あらゆるデータ型を表すことができます。アセットは、ファイルシステムに存在する場合もあれば、仮想的な場合もあります。

interface BaseAsset {
  +id: string,

アセットのID。

  +fs: FileSystem,

ソースが配置されているファイルシステム。

  +filePath: FilePath,

アセットのファイルパス。

  +type: string,

アセットのタイプ。これは最初はソースファイルの拡張子に対応しますが、変換中に変更される場合があります。

  +query: URLSearchParams,

依存関係のクエリ文字列からのアセットの変換オプション。

  +env: Environment,

アセットの環境。

  +isSource: boolean,

このアセットがプロジェクトの一部であり、外部依存関係(例:node_modules内)ではないかどうか。これは、プロジェクトの構成を使用した変換を適用する必要があることを示します。

  +meta: Meta,

アセットのプラグイン固有のメタデータ。

  +bundleBehavior: ?BundleBehavior,

アセットが配置されるバンドルを制御します。

  • inline: アセットは、新しいインラインバンドルに配置されます。インラインバンドルは、別のファイルには書き込まれず、親バンドルに埋め込まれます。
  • isolated: アセットは、別のバンドルで親から分離されます。共有アセットは複製されます。
  +isBundleSplittable: boolean,

アセットがバンドルエントリとして使用される場合、これはそのバンドルを複数に分割できるかどうか、またはすべての依存関係を1つのバンドルに配置する必要があるかどうかを制御します。

  +sideEffects: boolean,

エクスポートされたものが何も使用されていない場合に、このアセットを省略できるかどうか。これは最初にリゾルバーによって設定されますが、トランスフォーマーによってオーバーライドできます。

  +uniqueKey: ?string,

トランスフォーマーが複数のアセットを返す場合、それらを識別するための一意のキーを与えることができます。これは、パッケージング中にアセットを見つけたり、一意のキーを依存関係指定子として使用して、トランスフォーマーが返す複数のアセット間に依存関係を作成するために使用できます。

  +astGenerator: ?ASTGenerator,

ASTのタイプ。

  +pipeline: ?string,

.parcelrcで定義されている、アセットを処理する必要があるパイプライン。

  +symbols: AssetSymbols,

アセットがエクスポートするシンボル。

  getAST(): Promise<?AST>,

現在のASTを返します。

  getCode(): Promise<string>,

アセットの内容を文字列として返します。

  getBuffer(): Promise<Buffer>,

アセットの内容をバッファとして返します。

  getStream(): Readable,

アセットの内容をストリームとして返します。

  getMap(): Promise<?SourceMap>,

アセットのソースマップ(利用可能な場合)を返します。

  getMapBuffer(): Promise<?Buffer>,

ソースマップ(利用可能な場合)のバッファ表現を返します。

  getDependencies(): $ReadOnlyArray<Dependency>,

アセットの依存関係のリストを返します。

}
参照元
Asset, MutableAsset, ResolveResult

MutableAsset parcel/packages/core/types/index.js:725

変換中に利用可能な、可変のAsset

interface MutableAsset extends BaseAsset {
  type: string,

アセットのタイプ。これは最初はソースファイルの拡張子に対応しますが、変換中に変更される場合があります。

  bundleBehavior: ?BundleBehavior,

アセットが配置されるバンドルを制御します。

  • inline: アセットは、新しいインラインバンドルに配置されます。インラインバンドルは、別のファイルには書き込まれず、親バンドルに埋め込まれます。
  • isolated: アセットは、別のバンドルで親から分離されます。共有アセットは複製されます。
  isBundleSplittable: boolean,

アセットがバンドルエントリとして使用される場合、これはそのバンドルを複数に分割できるかどうか、またはすべての依存関係を1つのバンドルに配置する必要があるかどうかを制御します。

デフォルト値:

  sideEffects: boolean,

エクスポートされたものが何も使用されていない場合に、このアセットを省略できるかどうか。これは最初にリゾルバーによって設定されますが、トランスフォーマーによってオーバーライドできます。

  +symbols: MutableAssetSymbols,

アセットがエクスポートするシンボル。

  addDependency(DependencyOptions): string,

アセットに依存関係を追加します。

  addURLDependency(url: string, opts: $Shape<DependencyOptions>): string,

アセットにURL依存関係を追加します。これは、specifierTypeを'url'、priorityを'lazy'に設定するaddDependencyのショートカットです。

  invalidateOnFileChange(FilePath): void,

指定されたファイルが変更または削除されたときに、変換を無効にします。

  invalidateOnFileCreate(FileCreateInvalidation): void,

一致するファイルが作成されたときに、変換を無効にします。

  invalidateOnEnvChange(string): void,

指定された環境変数が変更されたときに、変換を無効にします。

  setCode(string): void,

アセットの内容を文字列として設定します。

  setBuffer(Buffer): void,

アセットの内容をバッファとして設定します。

  setStream(Readable): void,

アセットの内容をストリームとして設定します。

  setAST(AST): void,

アセットのASTを設定します。

  isASTDirty(): boolean,

ASTが変更されたかどうかを返します。

  setMap(?SourceMap): void,

アセットのソースマップを設定します。

  setEnvironment(opts: EnvironmentOptions): void,
}
参照元
トランスフォーマー

Config parcel/packages/core/types/index.js:809

interface Config {
  +isSource: boolean,

この構成がプロジェクトの一部であり、外部依存関係(例:node_modules内)ではないかどうか。これは、プロジェクトの構成を使用した変換を適用する必要があることを示します。

  +searchPath: FilePath,

構成の検索を開始するファイルのパス。

  +env: Environment,

環境

  invalidateOnFileChange(FilePath): void,

指定されたファイルが変更または削除されたときに、構成を無効にします。

  invalidateOnFileCreate(FileCreateInvalidation): void,

一致するファイルが作成されたときに、構成を無効にします。

  invalidateOnEnvChange(string): void,

指定された環境変数が変更されたときに、構成を無効にします。

  invalidateOnStartup(): void,

Parcelが再起動したときにのみ、構成を無効にします。

  invalidateOnBuild(): void,

すべてのビルドで構成を無効にします。

  addDevDependency(DevDepOptions): void,

設定に開発依存関係を追加します。開発依存関係またはその依存関係のいずれかが変更された場合、設定は無効になります。

  setCacheKey(string): void,

設定のキャッシュキーを設定します。デフォルトでは、これはinvalidateOnFileChangeに渡されたファイルまたはgetConfigによってロードされたファイルのハッシュとして計算されます。そうでない場合は、loadConfigから返された結果のハッシュが使用されます。このメソッドを使用すると、この動作をオーバーライドしてキャッシュキーを明示的に制御できます。これは、ファイルのほんの一部だけを使用して不要な無効化を回避する場合や、結果がハッシュ化できない場合(つまり、関数などのシリアル化できないプロパティが含まれている場合)に役立ちます。

  getConfig<T>(filePaths: Array<FilePath>, options?: {|
    packageKey?: string,
    parse?: boolean,
    exclude?: boolean,
  |}): Promise<?ConfigResultWithFilePath<T>>,

設定のsearchPathのすべての親ディレクトリで、指定された名前の設定ファイルを検索します。

  getConfigFrom<T>(searchPath: FilePath, filePaths: Array<FilePath>, options?: {|
    packageKey?: string,
    parse?: boolean,
    exclude?: boolean,
  |}): Promise<?ConfigResultWithFilePath<T>>,

渡されたsearchPathのすべての親ディレクトリで、指定された名前の設定ファイルを検索します。

  getPackage(): Promise<?PackageJSON>,

設定のsearchPathから最も近いpackage.jsonを見つけます。

}
参照元
BundlerNamerOptimizerPackagerResolverRuntimeTransformer

GenerateOutput parcel/packages/core/types/index.js:882

type GenerateOutput = {|
  +content: Blob,
  +map?: ?SourceMap,
|}
参照元
トランスフォーマー

TransformerResult parcel/packages/core/types/index.js:896

トランスフォーマーは、新しいアセットを作成するために複数の結果オブジェクトを返すことができます。たとえば、1つのファイルに異なるタイプの複数の部分が含まれている場合があり、それぞれの変換パイプラインで処理する必要があります。

type TransformerResult = {|
  +type: string,

アセットのタイプ。

  +content?: ?Blob,

アセットの内容。 contentまたはASTのいずれかが必要です。

  +ast?: ?AST,

アセットのAST。 contentまたはASTのいずれかが必要です。

  +map?: ?SourceMap,

アセットのソースマップ。

  +dependencies?: $ReadOnlyArray<DependencyOptions>,

アセットの依存関係。

  +env?: EnvironmentOptions | Environment,

アセットの環境。オプションは、入力アセットの環境とマージされます。

  +bundleBehavior?: ?BundleBehavior,

アセットが配置されるバンドルを制御します。

  • inline: アセットは、新しいインラインバンドルに配置されます。インラインバンドルは、別のファイルには書き込まれず、親バンドルに埋め込まれます。
  • isolated: アセットは、別のバンドルで親から分離されます。共有アセットは複製されます。
  +isBundleSplittable?: boolean,

アセットがバンドルエントリとして使用される場合、これはそのバンドルを複数に分割できるかどうか、またはすべての依存関係を1つのバンドルに配置する必要があるかどうかを制御します。

  +meta?: Meta,

アセットのプラグイン固有のメタデータ。

  +pipeline?: ?string,

.parcelrcで定義されている、アセットを処理する必要があるパイプライン。

  +sideEffects?: boolean,

エクスポートされたものが何も使用されていない場合に、このアセットを省略できるかどうか。これは最初にリゾルバーによって設定されますが、トランスフォーマーによってオーバーライドできます。

  +symbols?: $ReadOnlyMap<Symbol, {|
    local: Symbol,
    loc: ?SourceLocation,
  |}>,

アセットがエクスポートするシンボル。

  +uniqueKey?: ?string,

トランスフォーマーが複数のアセットを返す場合、それらを識別するための一意のキーを与えることができます。これは、パッケージング中にアセットを見つけたり、一意のキーを依存関係指定子として使用して、トランスフォーマーが返す複数のアセット間に依存関係を作成するために使用できます。

|}
参照元
トランスフォーマー

ResolveOptions parcel/packages/core/types/index.js:976

type ResolveOptions = {|
  +specifierType?: SpecifierType,

指定子がどのように解釈されるべきか。

  • esm: ESモジュール指定子。URLとして解析されますが、裸の指定子はnode_modulesとして扱われます。
  • commonjs: CommonJS指定子。URLとして解析されません。
  • url: ブラウザで機能するURL。裸の指定子は相対URLとして扱われます。
  • custom: カスタム指定子。カスタムリゾルバープラグインで処理する必要があります。
  +packageConditions?: Array<string>,

package.jsonの"exports"および"imports"を解決する際に使用するカスタム条件のリスト。

|}
参照元
ResolveFn

ResolveFn parcel/packages/core/types/index.js:992

タイプ
type ResolveFn = (from: FilePath, to: string, options?: ResolveOptions) => Promise<FilePath>;
参照元
トランスフォーマー

Transformer parcel/packages/core/types/index.js:1063

トランスフォーマープラグインのメソッド。

type Transformer<ConfigType> = {|
  loadConfig?: ({|
    config: Config,
    options: PluginOptions,
    logger: PluginLogger,
  |}) => Promise<ConfigType> | ConfigType,
  canReuseAST?: ({|
    ast: AST,
    options: PluginOptions,
    logger: PluginLogger,
  |}) => boolean,

前のトランスフォーマーからのASTを再利用できるかどうか(二重解析を防ぐため)

  parse?: ({|
    asset: Asset,
    config: ConfigType,
    resolve: ResolveFn,
    options: PluginOptions,
    logger: PluginLogger,
  |}) => Async<?AST>,

コンテンツをASTに解析します

  transform({|
    asset: MutableAsset,
    config: ConfigType,
    resolve: ResolveFn,
    options: PluginOptions,
    logger: PluginLogger,
  |}): Async<Array<TransformerResult | MutableAsset>>,

アセットを変換または新しいアセットを追加します

  postProcess?: ({|
    assets: Array<MutableAsset>,
    config: ConfigType,
    resolve: ResolveFn,
    options: PluginOptions,
    logger: PluginLogger,
  |}) => Async<Array<TransformerResult>>,
実験的としてマークされています

変換後にいくつかの処理を行います

  generate?: ({|
    asset: Asset,
    ast: AST,
    options: PluginOptions,
    logger: PluginLogger,
  |}) => Async<GenerateOutput>,

ASTを文字列化します

|}