diff --git a/docs/999-big-list-of-options.md b/docs/999-big-list-of-options.md index 76e730ed3d6..42fa0f9cf06 100755 --- a/docs/999-big-list-of-options.md +++ b/docs/999-big-list-of-options.md @@ -446,6 +446,7 @@ This pattern will also be used when setting the [`output.preserveModules`](guide * `[name]`: The file name (without extension) of the file. * `[ext]`: The extension of the file. * `[extname]`: The extension of the file, prefixed by `.` if it is not empty. +* `[assetExtname]`: The extension of the file, prefixed by `.` if it is not empty and it is not one of `js`, `jsx`, `ts` or `tsx`. #### output.extend Type: `boolean`
diff --git a/src/Chunk.ts b/src/Chunk.ts index 57103cdfcbf..f8258da7b0c 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -441,15 +441,14 @@ export default class Chunk { if (isAbsolute(id)) { const extension = extname(id); const pattern = unsetOptions.has('entryFileNames') - ? NON_ASSET_EXTENSIONS.includes(extension) - ? '[name].js' - : '[name][extname].js' + ? '[name][assetExtname].js' : options.entryFileNames; const currentDir = dirname(sanitizedId); const fileName = renderNamePattern( typeof pattern === 'function' ? pattern(this.getChunkInfo()) : pattern, 'output.entryFileNames', { + assetExtname: () => NON_ASSET_EXTENSIONS.includes(extension) ? '' : extension, ext: () => extension.substr(1), extname: () => extension, format: () => options.format as string, diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_config.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_config.js index f8e36cb7cbd..e74a2e8730f 100644 --- a/test/chunking-form/samples/preserve-modules-filename-pattern/_config.js +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_config.js @@ -1,10 +1,25 @@ +const path = require('path'); + module.exports = { description: 'entryFileNames pattern supported in combination with preserveModules', options: { input: 'src/main.ts', output: { - entryFileNames: 'entry-[name]-[format]-[ext][extname].js', + entryFileNames: 'entry-[name]-[format]-[ext][extname][assetExtname].js', preserveModules: true - } + }, + plugins: [ + { + name: 'str-plugin', + transform(code, id) { + switch (path.extname(id)) { + case '.str': + return { code: `export default "${code.trim()}"` }; + default: + return null; + } + } + } + ] } }; diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/amd/entry-lorem-amd-str.str.str.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/amd/entry-lorem-amd-str.str.str.js new file mode 100644 index 00000000000..8aeeca012a0 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/amd/entry-lorem-amd-str.str.str.js @@ -0,0 +1,7 @@ +define(function () { 'use strict'; + + var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + + return lorem; + +}); diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/amd/entry-main-amd-ts.ts.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/amd/entry-main-amd-ts.ts.js index 1018355bd77..47544257f06 100644 --- a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/amd/entry-main-amd-ts.ts.js +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/amd/entry-main-amd-ts.ts.js @@ -1,10 +1,11 @@ -define(['exports', './entry-foo-amd-ts.ts', './nested/entry-bar-amd-ts.ts', './nested/entry-baz-amd-ts.ts', './entry-no-ext-amd-'], function (exports, foo, bar, baz, noExt) { 'use strict'; +define(['exports', './entry-foo-amd-ts.ts', './nested/entry-bar-amd-ts.ts', './nested/entry-baz-amd-ts.ts', './entry-lorem-amd-str.str.str', './entry-no-ext-amd-'], function (exports, foo, bar, baz, lorem, noExt) { 'use strict'; exports.foo = foo; exports.bar = bar; exports.baz = baz; + exports.lorem = lorem; exports.noExt = noExt; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/cjs/entry-lorem-cjs-str.str.str.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/cjs/entry-lorem-cjs-str.str.str.js new file mode 100644 index 00000000000..aa3ea036c2f --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/cjs/entry-lorem-cjs-str.str.str.js @@ -0,0 +1,5 @@ +'use strict'; + +var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + +module.exports = lorem; diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/cjs/entry-main-cjs-ts.ts.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/cjs/entry-main-cjs-ts.ts.js index aff83e1b5d2..6dfba9b24b8 100644 --- a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/cjs/entry-main-cjs-ts.ts.js +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/cjs/entry-main-cjs-ts.ts.js @@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); var foo = require('./entry-foo-cjs-ts.ts.js'); var bar = require('./nested/entry-bar-cjs-ts.ts.js'); var baz = require('./nested/entry-baz-cjs-ts.ts.js'); +var lorem = require('./entry-lorem-cjs-str.str.str.js'); var noExt = require('./entry-no-ext-cjs-.js'); @@ -12,4 +13,5 @@ var noExt = require('./entry-no-ext-cjs-.js'); exports.foo = foo; exports.bar = bar; exports.baz = baz; +exports.lorem = lorem; exports.noExt = noExt; diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/es/entry-lorem-es-str.str.str.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/es/entry-lorem-es-str.str.str.js new file mode 100644 index 00000000000..64a054f651b --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/es/entry-lorem-es-str.str.str.js @@ -0,0 +1,3 @@ +var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + +export default lorem; diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/es/entry-main-es-ts.ts.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/es/entry-main-es-ts.ts.js index 341e9d48d9b..0112c707f28 100644 --- a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/es/entry-main-es-ts.ts.js +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/es/entry-main-es-ts.ts.js @@ -1,4 +1,5 @@ export { default as foo } from './entry-foo-es-ts.ts.js'; export { default as bar } from './nested/entry-bar-es-ts.ts.js'; export { default as baz } from './nested/entry-baz-es-ts.ts.js'; +export { default as lorem } from './entry-lorem-es-str.str.str.js'; export { default as noExt } from './entry-no-ext-es-.js'; diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/system/entry-lorem-system-str.str.str.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/system/entry-lorem-system-str.str.str.js new file mode 100644 index 00000000000..7ebf110f98b --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/system/entry-lorem-system-str.str.str.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + var lorem = exports('default', "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."); + + } + }; +}); diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/system/entry-main-system-ts.ts.js b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/system/entry-main-system-ts.ts.js index 22b35a8d704..6ac0704e19c 100644 --- a/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/system/entry-main-system-ts.ts.js +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/_expected/system/entry-main-system-ts.ts.js @@ -1,4 +1,4 @@ -System.register(['./entry-foo-system-ts.ts.js', './nested/entry-bar-system-ts.ts.js', './nested/entry-baz-system-ts.ts.js', './entry-no-ext-system-.js'], function (exports) { +System.register(['./entry-foo-system-ts.ts.js', './nested/entry-bar-system-ts.ts.js', './nested/entry-baz-system-ts.ts.js', './entry-lorem-system-str.str.str.js', './entry-no-ext-system-.js'], function (exports) { 'use strict'; return { setters: [function (module) { @@ -7,6 +7,8 @@ System.register(['./entry-foo-system-ts.ts.js', './nested/entry-bar-system-ts.ts exports('bar', module.default); }, function (module) { exports('baz', module.default); + }, function (module) { + exports('lorem', module.default); }, function (module) { exports('noExt', module.default); }], diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/src/lorem.str b/test/chunking-form/samples/preserve-modules-filename-pattern/src/lorem.str new file mode 100644 index 00000000000..1b376877f43 --- /dev/null +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/src/lorem.str @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/test/chunking-form/samples/preserve-modules-filename-pattern/src/main.ts b/test/chunking-form/samples/preserve-modules-filename-pattern/src/main.ts index 3f169c8f476..8822adfa953 100644 --- a/test/chunking-form/samples/preserve-modules-filename-pattern/src/main.ts +++ b/test/chunking-form/samples/preserve-modules-filename-pattern/src/main.ts @@ -5,4 +5,6 @@ export { default as bar } from './nested/bar.ts'; // @ts-ignore export { default as baz } from './nested/baz.ts'; // @ts-ignore +export { default as lorem } from './lorem.str'; +// @ts-ignore export { default as noExt } from './no-ext';