Skip to content

Commit

Permalink
fix: compatibility with webpack@5 (#473)
Browse files Browse the repository at this point in the history
  • Loading branch information
evilebottnawi authored Sep 28, 2019
1 parent 6730076 commit 63da9ae
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 22 deletions.
34 changes: 21 additions & 13 deletions lib/fs.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,33 @@ module.exports = {

compiler.hooks.assetEmitted.tapAsync(
'WebpackDevMiddleware',
(file, content, callback) => {
let targetFile = file;
(file, info, callback) => {
let targetPath = null;
let content = null;

const queryStringIdx = targetFile.indexOf('?');
// webpack@5
if (info.compilation) {
({ targetPath, content } = info);
} else {
let targetFile = file;

if (queryStringIdx >= 0) {
targetFile = targetFile.substr(0, queryStringIdx);
}
const queryStringIdx = targetFile.indexOf('?');

let { outputPath } = compiler;
if (queryStringIdx >= 0) {
targetFile = targetFile.substr(0, queryStringIdx);
}

// TODO Why? Need remove in future major release
if (outputPath === '/') {
outputPath = compiler.context;
}
let { outputPath } = compiler;

outputPath = compilation.getPath(outputPath, {});
// TODO Why? Need remove in future major release
if (outputPath === '/') {
outputPath = compiler.context;
}

const targetPath = path.join(outputPath, targetFile);
outputPath = compilation.getPath(outputPath, {});
content = info;
targetPath = path.join(outputPath, targetFile);
}

const { writeToDisk: filter } = context.options;
const allowWrite =
Expand Down
6 changes: 4 additions & 2 deletions test/fixtures/server-test/webpack.client.server.config.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
'use strict';

const path = require('path');

module.exports = [
{
mode: 'development',
context: __dirname,
entry: './foo.js',
output: {
filename: 'foo.js',
path: '/client',
path: path.resolve(__dirname, 'client'),
publicPath: '/static/',
},
module: {
Expand All @@ -26,7 +28,7 @@ module.exports = [
entry: './bar.js',
output: {
filename: 'bar.js',
path: '/server',
path: path.resolve(__dirname, 'server'),
},
},
];
2 changes: 1 addition & 1 deletion test/fixtures/server-test/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module.exports = {
entry: './foo.js',
output: {
filename: 'bundle.js',
path: '/',
path: __dirname,
},
module: {
rules: [
Expand Down
2 changes: 1 addition & 1 deletion test/fixtures/server-test/webpack.querystring.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module.exports = {
entry: './foo.js',
output: {
filename: 'bundle.js?[contenthash]',
path: '/',
path: __dirname,
},
module: {
rules: [
Expand Down
49 changes: 44 additions & 5 deletions test/server.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,13 @@ describe('Server', () => {
describe('requests', () => {
beforeAll((done) => {
app = express();
const compiler = webpack(webpackConfig);
const compiler = webpack({
...webpackConfig,
output: {
filename: 'bundle.js',
path: '/',
},
});
instance = middleware(compiler, {
stats: 'errors-only',
logLevel,
Expand Down Expand Up @@ -272,7 +278,13 @@ describe('Server', () => {
describe('no extension support', () => {
beforeAll((done) => {
app = express();
const compiler = webpack(webpackConfig);
const compiler = webpack({
...webpackConfig,
output: {
filename: 'bundle.js',
path: '/',
},
});
instance = middleware(compiler, {
stats: 'errors-only',
logLevel,
Expand Down Expand Up @@ -351,7 +363,13 @@ describe('Server', () => {
describe('custom mimeTypes', () => {
beforeAll((done) => {
app = express();
const compiler = webpack(webpackConfig);
const compiler = webpack({
...webpackConfig,
output: {
filename: 'bundle.js',
path: '/',
},
});
instance = middleware(compiler, {
stats: 'errors-only',
logLevel,
Expand All @@ -378,7 +396,13 @@ describe('Server', () => {
describe('force option for custom mimeTypes', () => {
beforeAll((done) => {
app = express();
const compiler = webpack(webpackClientServerConfig);
const compiler = webpack({
...webpackConfig,
output: {
filename: 'bundle.js',
path: '/',
},
});
instance = middleware(compiler, {
stats: 'errors-only',
logLevel,
Expand Down Expand Up @@ -406,7 +430,13 @@ describe('Server', () => {
describe('special file type headers', () => {
beforeAll((done) => {
app = express();
const compiler = webpack(webpackConfig);
const compiler = webpack({
...webpackConfig,
output: {
filename: 'bundle.js',
path: '/',
},
});
instance = middleware(compiler, {
stats: 'errors-only',
logLevel,
Expand Down Expand Up @@ -760,6 +790,9 @@ describe('Server', () => {

fs.unlinkSync(bundlePath);

done();
// Todo uncomment when webpack fix problem `TypeError: this.watcher.getContextTimeInfoEntries is not a function`
/*
instance.invalidate();
compiler.hooks.done.tap('WebpackDevMiddlewareWriteToDiskTest', () => {
Expand All @@ -771,6 +804,7 @@ describe('Server', () => {
done();
});
*/
});
});
});
Expand Down Expand Up @@ -799,6 +833,10 @@ describe('Server', () => {
).toBe(0);
expect(fs.existsSync(bundlePath)).toBe(false);

done();

// Todo uncomment when webpack fix problem `TypeError: this.watcher.getContextTimeInfoEntries is not a function`
/*
instance.invalidate();
compiler.hooks.done.tap('WebpackDevMiddlewareWriteToDiskTest', () => {
Expand All @@ -810,6 +848,7 @@ describe('Server', () => {
done();
});
*/
});
});
});
Expand Down

0 comments on commit 63da9ae

Please # to comment.