Skip to content
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

Add support for entryFileNames pattern used in combination with preserveModules option #3088

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/999-big-list-of-options.md
Expand Up @@ -420,6 +420,8 @@ The pattern to use for chunks created from entry points. Pattern supports the fo

Forward slashes `/` can be used to place files in sub-directories. See also [`output.assetFileNames`](guide/en/#outputassetfilenames), [`output.chunkFileNames`](guide/en/#outputchunkfilenames).

This pattern will also be used when using the [`preserveModules`](guide/en/#preservemodules) option. Note however that when preserving modules, hashes are not yet supported.

#### output.extend
Type: `boolean`<br>
CLI: `--extend`/`--no-extend`<br>
Expand Down
26 changes: 18 additions & 8 deletions src/Chunk.ts
Expand Up @@ -277,17 +277,27 @@ export default class Chunk {

generateIdPreserveModules(
preserveModulesRelativeDir: string,
options: OutputOptions,
existingNames: Record<string, any>
): string {
const sanitizedId = sanitizeFileName(this.orderedModules[0].id);
return makeUnique(
normalize(
isAbsolute(this.orderedModules[0].id)
? relative(preserveModulesRelativeDir, sanitizedId)
: '_virtual/' + basename(sanitizedId)
),
existingNames
);

let path: string;
if (isAbsolute(this.orderedModules[0].id)) {
const name = renderNamePattern(
options.entryFileNames || '[name].js',
'output.entryFileNames',
{
format: () => (options.format === 'es' ? 'esm' : (options.format as string)),
name: () => this.getChunkName()
}
);

path = relative(preserveModulesRelativeDir, `${dirname(sanitizedId)}/${name}`);
} else {
path = `_virtual/${basename(sanitizedId)}`;
}
return makeUnique(normalize(path), existingNames);
}

generateInternalExports(options: OutputOptions) {
Expand Down
2 changes: 1 addition & 1 deletion src/utils/assignChunkIds.ts
Expand Up @@ -27,7 +27,7 @@ export function assignChunkIds(
if (outputOptions.file) {
chunk.id = basename(outputOptions.file);
} else if (inputOptions.preserveModules) {
chunk.id = chunk.generateIdPreserveModules(inputBase, bundle);
chunk.id = chunk.generateIdPreserveModules(inputBase, outputOptions, bundle);
} else {
chunk.id = chunk.generateId(addons, outputOptions, bundle, true);
}
Expand Down
@@ -0,0 +1,10 @@
module.exports = {
description: 'entryFileNames pattern supported in combination with preserveModules',
options: {
input: 'src/main.ts',
output: {
entryFileNames: 'entry-[name]-[format].js'
},
preserveModules: true
}
};
@@ -0,0 +1,7 @@
define(['exports'], function (exports) { 'use strict';

var foo = 42;

exports.default = foo;

});
@@ -0,0 +1,11 @@
define(['exports', './entry-foo-amd', './nested/entry-bar-amd', './nested/entry-baz-amd'], function (exports, foo, bar, baz) { 'use strict';



exports.foo = foo.default;
exports.bar = bar.default;
exports.baz = baz.default;

Object.defineProperty(exports, '__esModule', { value: true });

});
@@ -0,0 +1,7 @@
define(['exports'], function (exports) { 'use strict';

var bar = 'banana';

exports.default = bar;

});
@@ -0,0 +1,7 @@
define(['exports'], function (exports) { 'use strict';

var baz = 'whatever';

exports.default = baz;

});
@@ -0,0 +1,5 @@
'use strict';

var foo = 42;

exports.default = foo;
@@ -0,0 +1,13 @@
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var foo = require('./entry-foo-cjs.js');
var bar = require('./nested/entry-bar-cjs.js');
var baz = require('./nested/entry-baz-cjs.js');



exports.foo = foo.default;
exports.bar = bar.default;
exports.baz = baz.default;
@@ -0,0 +1,5 @@
'use strict';

var bar = 'banana';

exports.default = bar;
@@ -0,0 +1,5 @@
'use strict';

var baz = 'whatever';

exports.default = baz;
@@ -0,0 +1,3 @@
var foo = 42;

export default foo;
@@ -0,0 +1,3 @@
export { default as foo } from './entry-foo-esm.js';
export { default as bar } from './nested/entry-bar-esm.js';
export { default as baz } from './nested/entry-baz-esm.js';
@@ -0,0 +1,3 @@
var bar = 'banana';

export default bar;
@@ -0,0 +1,3 @@
var baz = 'whatever';

export default baz;
@@ -0,0 +1,10 @@
System.register([], function (exports) {
'use strict';
return {
execute: function () {

var foo = exports('default', 42);

}
};
});
@@ -0,0 +1,17 @@
System.register(['./entry-foo-system.js', './nested/entry-bar-system.js', './nested/entry-baz-system.js'], function (exports) {
'use strict';
return {
setters: [function (module) {
exports('foo', module.default);
}, function (module) {
exports('bar', module.default);
}, function (module) {
exports('baz', module.default);
}],
execute: function () {



}
};
});
@@ -0,0 +1,10 @@
System.register([], function (exports) {
'use strict';
return {
execute: function () {

var bar = exports('default', 'banana');

}
};
});
@@ -0,0 +1,10 @@
System.register([], function (exports) {
'use strict';
return {
execute: function () {

var baz = exports('default', 'whatever');

}
};
});
@@ -0,0 +1 @@
export default 42;
@@ -0,0 +1,6 @@
// @ts-ignore
export { default as foo } from './foo.ts';
// @ts-ignore
export { default as bar } from './nested/bar.ts';
// @ts-ignore
export { default as baz } from './nested/baz.ts';
@@ -0,0 +1 @@
export default 'banana';
@@ -0,0 +1 @@
export default 'whatever';