Skip to content

Commit

Permalink
Add unstable_enableWorkerThreads options to transformer and watcher
Browse files Browse the repository at this point in the history
Summary:
Add two options to use Node worker threads rather than `child_process` for Metro's transformer and watcher. This directly corresponds to `jest-worker`'s `enableWorkerThreads` option.

These are largely for internal experimentation - it's likely the options will be removed and worker threads will be enabled by default as non-breaking change in a subsequent release.

Changelog:
```
* **[Experimental]:** Add `unstable_workerThreads` options to `transformer` and `watcher` configuration.
```

Reviewed By: motiz88

Differential Revision: D50655866

fbshipit-source-id: 498b6a73b11e00c12d109bf6d00d345939aaba0a
  • Loading branch information
robhogan authored and facebook-github-bot committed Oct 26, 2023
1 parent 9732f4a commit 20df4ec
Show file tree
Hide file tree
Showing 7 changed files with 19 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ Object {
"unstable_dependencyMapReservedName": null,
"unstable_disableModuleWrapping": false,
"unstable_disableNormalizePseudoGlobals": false,
"unstable_workerThreads": false,
"workerPath": "metro/src/DeltaBundler/Worker",
},
"transformerPath": "",
Expand All @@ -169,6 +170,7 @@ Object {
"interval": 30000,
"timeout": 5000,
},
"unstable_workerThreads": false,
"watchman": Object {
"deferStates": Array [
"hg.update",
Expand Down Expand Up @@ -329,6 +331,7 @@ Object {
"unstable_dependencyMapReservedName": null,
"unstable_disableModuleWrapping": false,
"unstable_disableNormalizePseudoGlobals": false,
"unstable_workerThreads": false,
"workerPath": "metro/src/DeltaBundler/Worker",
},
"transformerPath": "",
Expand All @@ -347,6 +350,7 @@ Object {
"interval": 30000,
"timeout": 5000,
},
"unstable_workerThreads": false,
"watchman": Object {
"deferStates": Array [
"hg.update",
Expand Down Expand Up @@ -507,6 +511,7 @@ Object {
"unstable_dependencyMapReservedName": null,
"unstable_disableModuleWrapping": false,
"unstable_disableNormalizePseudoGlobals": false,
"unstable_workerThreads": false,
"workerPath": "metro/src/DeltaBundler/Worker",
},
"transformerPath": "",
Expand All @@ -525,6 +530,7 @@ Object {
"interval": 30000,
"timeout": 5000,
},
"unstable_workerThreads": false,
"watchman": Object {
"deferStates": Array [
"hg.update",
Expand Down Expand Up @@ -685,6 +691,7 @@ Object {
"unstable_dependencyMapReservedName": null,
"unstable_disableModuleWrapping": false,
"unstable_disableNormalizePseudoGlobals": false,
"unstable_workerThreads": false,
"workerPath": "metro/src/DeltaBundler/Worker",
},
"transformerPath": "",
Expand All @@ -703,6 +710,7 @@ Object {
"interval": 30000,
"timeout": 5000,
},
"unstable_workerThreads": false,
"watchman": Object {
"deferStates": Array [
"hg.update",
Expand Down
2 changes: 2 additions & 0 deletions packages/metro-config/src/configTypes.flow.js
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ type TransformerConfigT = {
transformVariants: {+[name: string]: {...}},
workerPath: string,
publicPath: string,
unstable_workerThreads: boolean,
};

type MetalConfigT = {
Expand Down Expand Up @@ -196,6 +197,7 @@ type WatcherConfigT = {
timeout: number,
filePrefix: string,
},
unstable_workerThreads: boolean,
watchman: {
deferStates: $ReadOnlyArray<string>,
},
Expand Down
2 changes: 2 additions & 0 deletions packages/metro-config/src/defaults/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ const getDefaultValues = (projectRoot: ?string): ConfigT => ({
unstable_disableModuleWrapping: false,
unstable_disableNormalizePseudoGlobals: false,
unstable_compactOutput: false,
unstable_workerThreads: false,
},
watcher: {
additionalExts,
Expand All @@ -144,6 +145,7 @@ const getDefaultValues = (projectRoot: ?string): ConfigT => ({
interval: 30000,
timeout: 5000,
},
unstable_workerThreads: false,
watchman: {
deferStates: ['hg.update'],
},
Expand Down
4 changes: 4 additions & 0 deletions packages/metro-file-map/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ export type InputOptions = $ReadOnly<{
computeSha1?: ?boolean,
enableHastePackages?: boolean,
enableSymlinks?: ?boolean,
enableWorkerThreads?: ?boolean,
extensions: $ReadOnlyArray<string>,
forceNodeFilesystemAPI?: ?boolean,
ignorePattern?: ?RegExp,
Expand Down Expand Up @@ -112,6 +113,7 @@ type HealthCheckOptions = $ReadOnly<{

type InternalOptions = {
...BuildParameters,
enableWorkerThreads: boolean,
healthCheck: HealthCheckOptions,
perfLoggerFactory: ?PerfLoggerFactory,
resetCache: ?boolean,
Expand Down Expand Up @@ -309,6 +311,7 @@ export default class FileMap extends EventEmitter {

this._options = {
...buildParameters,
enableWorkerThreads: options.enableWorkerThreads ?? false,
healthCheck: options.healthCheck,
maxWorkers: options.maxWorkers,
perfLoggerFactory: options.perfLoggerFactory,
Expand Down Expand Up @@ -808,6 +811,7 @@ export default class FileMap extends EventEmitter {
exposedMethods: ['worker'],
maxRetries: 3,
numWorkers: this._options.maxWorkers,
enableWorkerThreads: this._options.enableWorkerThreads,
forkOptions: {
// Don't pass Node arguments down to workers. In particular, avoid
// unnecessarily registering Babel when we're running Metro from
Expand Down
1 change: 1 addition & 0 deletions packages/metro/src/DeltaBundler/Transformer.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class Transformer {
getTransformOptions: _getTransformOptions,
transformVariants: _transformVariants,
workerPath: _workerPath,
unstable_workerThreads: _workerThreads,
...transformerConfig
} = this._config.transformer;

Expand Down
1 change: 1 addition & 0 deletions packages/metro/src/DeltaBundler/WorkerFarm.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ class WorkerFarm {
this._computeWorkerKey
: undefined,
exposedMethods,
enableWorkerThreads: this._config.transformer.unstable_workerThreads,
forkOptions: {env},
numWorkers,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ function createFileMap(
dependencyExtractor: config.resolver.dependencyExtractor,
enableHastePackages: config?.resolver.enableGlobalPackages,
enableSymlinks: config.resolver.unstable_enableSymlinks,
enableWorkerThreads: config.watcher.unstable_workerThreads,
extensions: Array.from(
new Set([
...config.resolver.sourceExts,
Expand Down

0 comments on commit 20df4ec

Please sign in to comment.