Skip to content

Commit 09ac7bd

Browse files
committed
🐛 fix webpack assets conflict if output filenames end with .user.js
fix #90
1 parent c383f99 commit 09ac7bd

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

lib/plugin.ts

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,10 @@ export class UserscriptPlugin
189189
),
190190
);
191191

192-
for (const { originalFile } of context.fileInfo) {
193-
compilation.deleteAsset(originalFile);
192+
for (const { originalFile, userjsFile } of context.fileInfo) {
193+
if (originalFile !== userjsFile) {
194+
compilation.deleteAsset(originalFile);
195+
}
194196
}
195197

196198
await this.hooks.process.promise(compilation, context);
@@ -300,14 +302,24 @@ export class UserscriptPlugin
300302
? await this.hooks.renderProxyHeaders.promise(proxyHeaders)
301303
: undefined;
302304

303-
compilation.emitAsset(
304-
userjsFile,
305-
new ConcatSource(headersStr, '\n', sourceAsset.source),
306-
{
307-
minimized: true,
308-
},
309-
);
310-
chunk.files.add(userjsFile);
305+
if (userjsFile !== originalFile) {
306+
compilation.emitAsset(
307+
userjsFile,
308+
new ConcatSource(headersStr, '\n', sourceAsset.source),
309+
{
310+
minimized: true,
311+
},
312+
);
313+
chunk.files.add(userjsFile);
314+
} else {
315+
compilation.updateAsset(
316+
userjsFile,
317+
new ConcatSource(headersStr, '\n', sourceAsset.source),
318+
{
319+
minimized: true,
320+
},
321+
);
322+
}
311323

312324
if (metajs !== false) {
313325
compilation.emitAsset(metajsFile, new RawSource(headersStr), {

test/integration/general/index.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,24 @@ describe('general', () => {
4040
'/dist/output.js': Fixtures.entryMinJs,
4141
});
4242
});
43+
44+
// eslint-disable-next-line max-len
45+
it('should successfully compile even the file extension is .user.js', async () => {
46+
input.renameSync('/entry.js', '/entry.user.js');
47+
48+
const output = await compile(input, {
49+
...Fixtures.webpackConfig,
50+
entry: '/entry.user.js',
51+
output: {
52+
path: '/dist',
53+
filename: 'output.user.js',
54+
},
55+
plugins: [new UserscriptPlugin()],
56+
});
57+
58+
expect(output.toJSON()).toEqual({
59+
'/dist/output.user.js': Fixtures.entryUserJs(Fixtures.headers),
60+
'/dist/output.meta.js': Fixtures.headers,
61+
});
62+
});
4363
});

0 commit comments

Comments
 (0)