diff --git a/lib/common/asar_init.js b/lib/common/asar_init.js index 4df4f156534..f7fe012cab1 100644 --- a/lib/common/asar_init.js +++ b/lib/common/asar_init.js @@ -3,7 +3,13 @@ ;(function () { // eslint-disable-line return function (source, require, asarSource) { // Expose fs module without asar support. - source['original-fs'] = source.fs + + // NB: Node's 'fs' and 'internal/fs/streams' have a lazy-loaded circular + // dependency. So to expose the unmodified Node 'fs' functionality here, + // we have to copy both 'fs' *and* 'internal/fs/streams' and modify the + // copies to depend on each other instead of on our asarified 'fs' code. + source['original-fs'] = source.fs.replace("require('internal/fs/streams')", "require('original-fs/streams')") + source['original-fs/streams'] = source['internal/fs/streams'].replace("require('fs')", "require('original-fs')") // Make asar.js accessible via "require". source.ELECTRON_ASAR = asarSource