По сути, пакет-обертка должен использоваться для предоставления точки входа вместо оригинальной упаковки.process.platform
должно быть смоделировано с новым значением до запуска оригинального пакета.
wrapper-package / index.js
Object.defineProperty(process, 'platform', { value: 'linux' });
require('original-package/bin/entry-point.js');
Это не повлияет на дочерние процессы, если их порождает оригинальный пакет.
Это не 'Мы не можем гарантировать, что пакет будет работать так, как задумано, с проверенной платформой.Даже если сам пакет работает правильно, это может привести к непредсказуемому поведению в зависимостях пакета, которые зависят от process.platform
.
Чтобы повлиять на process.platform
только для определенного модуля, глобальная область platform
должна быть затенена с помощьюлокальная переменная.Для этого необходимо изменить функцию-обертку модуля:
const Module = require('module')
const escapedPatchedModulePath = require.resolve('original-package/module-to-patch.js')
.replace(/\\/g, '\\\\');
Module.wrapper[0] += `
const isPatchedModule = __filename === "${escapedPatchedModulePath}";
let process = isPatchedModule
? Object.create(global.process, { platform: { value: 'linux' } })
: global.process;
`;
require('original-package/bin/entry-point.js');