| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 6624ac3 commit 5736dc4
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,6 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | 3 | const fs = require('fs'); | |
| 4 | 4 | const internalCJSModule = require('internal/module'); | |
| 5 | + const CJSModule = require('module'); | ||
| 5 | 6 | const internalURLModule = require('internal/url'); | |
| 6 | 7 | const internalFS = require('internal/fs'); | |
| 7 | 8 | const NativeModule = require('native_module'); | |
@@ -35,11 +36,19 @@ loaders.set('esm', async (url) => { | |||
| 35 | 36 | }); | |
| 36 | 37 | ||
| 37 | 38 | // Strategy for loading a node-style CommonJS module | |
| 39 | + const isWindows = process.platform === 'win32'; | ||
| 40 | + const winSepRegEx = /\//g; | ||
| 38 | 41 | loaders.set('cjs', async (url) => { | |
| 42 | + const pathname = internalURLModule.getPathFromURL(new URL(url)); | ||
| 43 | + const module = CJSModule._cache[ | ||
| 44 | + isWindows ? pathname.replace(winSepRegEx, '\\') : pathname]; | ||
| 45 | + if (module && module.loaded) { | ||
| 46 | + const ctx = createDynamicModule(['default'], url, undefined); | ||
| 47 | + ctx.reflect.exports.default.set(module.exports); | ||
| 48 | + return ctx; | ||
| 49 | + } | ||
| 39 | 50 | return createDynamicModule(['default'], url, (reflect) => { | |
| 40 | 51 | debug(`Loading CJSModule ${url}`); | |
| 41 | - const CJSModule = require('module'); | ||
| 42 | - const pathname = internalURLModule.getPathFromURL(new URL(url)); | ||
| 43 | 52 | CJSModule._load(pathname); | |
| 44 | 53 | }); | |
| 45 | 54 | }); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -39,6 +39,9 @@ const experimentalModules = !!process.binding('config').experimentalModules; | |||
| 39 | 39 | ||
| 40 | 40 | const errors = require('internal/errors'); | |
| 41 | 41 | ||
| 42 | + module.exports = Module; | ||
| 43 | + | ||
| 44 | + // these are below module.exports for the circular reference | ||
| 42 | 45 | const Loader = require('internal/loader/Loader'); | |
| 43 | 46 | const ModuleJob = require('internal/loader/ModuleJob'); | |
| 44 | 47 | const { createDynamicModule } = require('internal/loader/ModuleWrap'); | |
@@ -72,7 +75,6 @@ function Module(id, parent) { | |||
| 72 | 75 | this.loaded = false; | |
| 73 | 76 | this.children = []; | |
| 74 | 77 | } | |
| 75 | - module.exports = Module; | ||
| 76 | 78 | ||
| 77 | 79 | const builtinModules = Object.keys(NativeModule._source) | |
| 78 | 80 | .filter(NativeModule.nonInternalExists); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,7 @@ | |||
| 1 | + // Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-shared-dep.mjs | ||
| 2 | + /* eslint-disable required-modules */ | ||
| 3 | + import assert from 'assert'; | ||
| 4 | + import './test-esm-ok.mjs'; | ||
| 5 | + import dep from '../fixtures/es-module-loaders/loader-dep.js'; | ||
| 6 | + | ||
| 7 | + assert.strictEqual(dep.format, 'esm'); | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,7 @@ | |||
| 1 | + import dep from './loader-dep.js'; | ||
| 2 | + import assert from 'assert'; | ||
| 3 | + | ||
| 4 | + export function resolve(specifier, base, defaultResolve) { | ||
| 5 | + assert.equal(dep.format, 'esm'); | ||
| 6 | + return defaultResolve(specifier, base); | ||
| 7 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments