-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature] Add preserveModulesRoot config option #3786
Changes from 9 commits
ab49e9a
bb3603a
45c7516
b8e5e5a
c6628e5
4b629a6
ab4eb7b
181397a
bb16a35
e536077
1f6d7a9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -441,20 +441,29 @@ export default class Chunk { | |
? '[name].js' | ||
: '[name][extname].js' | ||
: options.entryFileNames; | ||
path = relative( | ||
preserveModulesRelativeDir, | ||
`${dirname(sanitizedId)}/${renderNamePattern( | ||
pattern, | ||
'output.entryFileNames', | ||
{ | ||
ext: () => extension.substr(1), | ||
extname: () => extension, | ||
format: () => options.format as string, | ||
name: () => this.getChunkName() | ||
}, | ||
this.getChunkInfo.bind(this) | ||
)}` | ||
let currentDir = dirname(sanitizedId); | ||
const fileName = renderNamePattern( | ||
pattern, | ||
'output.entryFileNames', | ||
{ | ||
ext: () => extension.substr(1), | ||
extname: () => extension, | ||
format: () => options.format as string, | ||
name: () => this.getChunkName() | ||
}, | ||
this.getChunkInfo.bind(this) | ||
); | ||
if (options.preserveModulesRoot) { | ||
const preserveModulesRoot = resolve(options.preserveModulesRoot); | ||
if (currentDir.startsWith(preserveModulesRoot)) { | ||
currentDir = resolve( | ||
preserveModulesRelativeDir, | ||
currentDir.slice(preserveModulesRoot.length).replace(/^\//, '') | ||
); | ||
} | ||
} | ||
const currentPath = `${currentDir}/${fileName}`; | ||
path = relative(preserveModulesRelativeDir, currentPath); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am thinking, is this really all necessary? Wouldn't this be the same: if (currentDir.startsWith(preserveModulesRoot)) {
path = currentDir.slice(preserveModulesRoot.length).replace(/^\//, '')
} else {
path = relative(preserveModulesRelativeDir, `${currentDir}/${fileName}`);
} or am I overlooking something here? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. In practice, this will probably will be the case, at least for right now. Edit: I think I figured this out -- this was close to what we needed |
||
} else { | ||
path = `_virtual/${basename(sanitizedId)}`; | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
const commonjs = require('@rollup/plugin-commonjs'); | ||
const resolve = require('@rollup/plugin-node-resolve').default; | ||
|
||
module.exports = { | ||
description: 'confirm preserveModulesRoot restructures src appropriately', | ||
options: { | ||
input: ['src/under-build.js', 'src/below/module.js'], | ||
plugins: [ | ||
resolve({ | ||
customResolveOptions: { | ||
moduleDirectory: ['custom_modules'] | ||
} | ||
}), | ||
commonjs() | ||
], | ||
output: { | ||
preserveModules: true, | ||
preserveModulesRoot: 'src' | ||
} | ||
} | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
define(['exports'], function (exports) { 'use strict'; | ||
|
||
function createCommonjsModule(fn, basedir, module) { | ||
return module = { | ||
path: basedir, | ||
exports: {}, | ||
require: function (path, base) { | ||
return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); | ||
} | ||
}, fn(module, module.exports), module.exports; | ||
} | ||
|
||
function commonjsRequire () { | ||
throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); | ||
} | ||
|
||
exports.commonjsRequire = commonjsRequire; | ||
exports.createCommonjsModule = createCommonjsModule; | ||
|
||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
|
||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
define(['../custom_modules/@my-scope/my-base-pkg/index'], function (index) { 'use strict'; | ||
|
||
|
||
|
||
return index.myBasePkg; | ||
|
||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
define(['../custom_modules/@my-scope/my-base-pkg/index'], function (index) { 'use strict'; | ||
|
||
var module = { | ||
base2: index.myBasePkg, | ||
}; | ||
|
||
return module; | ||
|
||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
define(['exports', '../../../_virtual/_commonjsHelpers'], function (exports, _commonjsHelpers) { 'use strict'; | ||
|
||
var myBasePkg = _commonjsHelpers.createCommonjsModule(function (module, exports) { | ||
|
||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
|
||
var hello = 'world'; | ||
|
||
exports.hello = hello; | ||
}); | ||
|
||
exports.myBasePkg = myBasePkg; | ||
|
||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
|
||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
define(['./custom_modules/@my-scope/my-base-pkg/index'], function (index) { 'use strict'; | ||
|
||
var underBuild = { | ||
base: index.myBasePkg | ||
}; | ||
|
||
return underBuild; | ||
|
||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
'use strict'; | ||
|
||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
|
||
function createCommonjsModule(fn, basedir, module) { | ||
return module = { | ||
path: basedir, | ||
exports: {}, | ||
require: function (path, base) { | ||
return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); | ||
} | ||
}, fn(module, module.exports), module.exports; | ||
} | ||
|
||
function commonjsRequire () { | ||
throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); | ||
} | ||
|
||
exports.commonjsRequire = commonjsRequire; | ||
exports.createCommonjsModule = createCommonjsModule; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
'use strict'; | ||
|
||
var index = require('../custom_modules/@my-scope/my-base-pkg/index.js'); | ||
|
||
|
||
|
||
module.exports = index.myBasePkg; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
'use strict'; | ||
|
||
var index = require('../custom_modules/@my-scope/my-base-pkg/index.js'); | ||
|
||
var module$1 = { | ||
base2: index.myBasePkg, | ||
}; | ||
|
||
module.exports = module$1; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
'use strict'; | ||
|
||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
|
||
var _commonjsHelpers = require('../../../_virtual/_commonjsHelpers.js'); | ||
|
||
var myBasePkg = _commonjsHelpers.createCommonjsModule(function (module, exports) { | ||
|
||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
|
||
var hello = 'world'; | ||
|
||
exports.hello = hello; | ||
}); | ||
|
||
exports.myBasePkg = myBasePkg; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
'use strict'; | ||
|
||
var index = require('./custom_modules/@my-scope/my-base-pkg/index.js'); | ||
|
||
var underBuild = { | ||
base: index.myBasePkg | ||
}; | ||
|
||
module.exports = underBuild; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
function createCommonjsModule(fn, basedir, module) { | ||
return module = { | ||
path: basedir, | ||
exports: {}, | ||
require: function (path, base) { | ||
return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); | ||
} | ||
}, fn(module, module.exports), module.exports; | ||
} | ||
|
||
function commonjsRequire () { | ||
throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); | ||
} | ||
|
||
export { commonjsRequire, createCommonjsModule }; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
import { m as myBasePkg } from '../custom_modules/@my-scope/my-base-pkg/index.js'; | ||
export { m as default } from '../custom_modules/@my-scope/my-base-pkg/index.js'; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import { m as myBasePkg } from '../custom_modules/@my-scope/my-base-pkg/index.js'; | ||
|
||
var module = { | ||
base2: myBasePkg, | ||
}; | ||
|
||
export default module; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import { createCommonjsModule } from '../../../_virtual/_commonjsHelpers.js'; | ||
|
||
var myBasePkg = createCommonjsModule(function (module, exports) { | ||
|
||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
|
||
var hello = 'world'; | ||
|
||
exports.hello = hello; | ||
}); | ||
|
||
export { myBasePkg as m }; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import { m as myBasePkg } from './custom_modules/@my-scope/my-base-pkg/index.js'; | ||
|
||
var underBuild = { | ||
base: myBasePkg | ||
}; | ||
|
||
export default underBuild; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
System.register([], function (exports) { | ||
'use strict'; | ||
return { | ||
execute: function () { | ||
|
||
exports({ | ||
commonjsRequire: commonjsRequire, | ||
createCommonjsModule: createCommonjsModule | ||
}); | ||
|
||
function createCommonjsModule(fn, basedir, module) { | ||
return module = { | ||
path: basedir, | ||
exports: {}, | ||
require: function (path, base) { | ||
return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); | ||
} | ||
}, fn(module, module.exports), module.exports; | ||
} | ||
|
||
function commonjsRequire () { | ||
throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); | ||
} | ||
|
||
} | ||
}; | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
System.register(['../custom_modules/@my-scope/my-base-pkg/index.js'], function (exports) { | ||
'use strict'; | ||
var myBasePkg; | ||
return { | ||
setters: [function (module) { | ||
myBasePkg = module.m; | ||
exports('default', module.m); | ||
}], | ||
execute: function () { | ||
|
||
|
||
|
||
} | ||
}; | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
System.register(['../custom_modules/@my-scope/my-base-pkg/index.js'], function (exports) { | ||
'use strict'; | ||
var myBasePkg; | ||
return { | ||
setters: [function (module) { | ||
myBasePkg = module.m; | ||
}], | ||
execute: function () { | ||
|
||
var module$1 = exports('default', { | ||
base2: myBasePkg, | ||
}); | ||
|
||
} | ||
}; | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is quite a bit of
resolving
going on here which is not free asresolve
involves non-trivial file-system operations. So one way to get rid of the first one at least would be to perform this resolution once innormalizeOutputOptions
so thatoptions.preserveModulesRoot
is already resolved at this point.