Skip to content

Commit 5a8483d

Browse files
committed
Add a warning if webpack was also added as a dependency by the user
1 parent 5fcd4cb commit 5a8483d

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

index.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ const logger = require('./lib/logger');
1717
const parseRuntime = require('./lib/config/parse-runtime');
1818
const chalk = require('chalk');
1919
const levenshtein = require('fast-levenshtein');
20+
const fs = require('fs');
21+
const path = require('path');
2022

2123
let webpackConfig = null;
2224
let runtimeConfig = require('./lib/context').runtimeConfig;
@@ -26,6 +28,26 @@ function initializeWebpackConfig() {
2628
logger.verbose();
2729
}
2830

31+
// Display a warning if webpack is listed as a [dev-]dependency
32+
try {
33+
const packageInfo = JSON.parse(
34+
fs.readFileSync(path.resolve(runtimeConfig.context, 'package.json'))
35+
);
36+
37+
if (packageInfo) {
38+
const dependencies = new Set([
39+
...(packageInfo.dependencies ? Object.keys(packageInfo.dependencies) : []),
40+
...(packageInfo.devDependencies ? Object.keys(packageInfo.devDependencies) : []),
41+
]);
42+
43+
if (dependencies.has('webpack')) {
44+
logger.warning('Webpack is already provided by Webpack Encore, also adding it to your package.json file may cause issues.');
45+
}
46+
}
47+
} catch (e) {
48+
logger.warning('Could not read package.json file.');
49+
}
50+
2951
webpackConfig = new WebpackConfig(runtimeConfig);
3052
}
3153

test/bin/encore.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ describe('bin/encore.js', function() {
2525
testSetup.emptyTmpDir();
2626
const testDir = testSetup.createTestAppDir();
2727

28+
fs.writeFileSync(
29+
path.join(testDir, 'package.json'),
30+
`{
31+
"devDependencies": {
32+
"@symfony/webpack-encore": "*"
33+
}
34+
}`
35+
);
36+
2837
fs.writeFileSync(
2938
path.join(testDir, 'webpack.config.js'),
3039
`
@@ -45,6 +54,8 @@ module.exports = Encore.getWebpackConfig();
4554
throw new Error(`Error executing encore: ${err} ${stderr} ${stdout}`);
4655
}
4756

57+
expect(stdout).to.not.contain('Webpack is already provided by Webpack Encore');
58+
4859
done();
4960
});
5061
});
@@ -142,4 +153,44 @@ module.exports = Encore.getWebpackConfig();
142153
done();
143154
});
144155
});
156+
157+
it('Display a warning message when webpack is also added to the package.json file', (done) => {
158+
testSetup.emptyTmpDir();
159+
const testDir = testSetup.createTestAppDir();
160+
161+
fs.writeFileSync(
162+
path.join(testDir, 'package.json'),
163+
`{
164+
"devDependencies": {
165+
"@symfony/webpack-encore": "*",
166+
"webpack": "*"
167+
}
168+
}`
169+
);
170+
171+
fs.writeFileSync(
172+
path.join(testDir, 'webpack.config.js'),
173+
`
174+
const Encore = require('../../index.js');
175+
Encore
176+
.setOutputPath('build/')
177+
.setPublicPath('/build')
178+
.addEntry('main', './js/no_require')
179+
;
180+
181+
module.exports = Encore.getWebpackConfig();
182+
`
183+
);
184+
185+
const binPath = path.resolve(__dirname, '../', '../', 'bin', 'encore.js');
186+
exec(`node ${binPath} dev --context=${testDir}`, { cwd: testDir }, (err, stdout, stderr) => {
187+
if (err) {
188+
throw new Error(`Error executing encore: ${err} ${stderr} ${stdout}`);
189+
}
190+
191+
expect(stdout).to.contain('Webpack is already provided by Webpack Encore');
192+
193+
done();
194+
});
195+
});
145196
});

0 commit comments

Comments
 (0)