Skip to content

Commit b9613c1

Browse files
committed
refactor: Make config file handling consistent
1 parent ccafe17 commit b9613c1

File tree

4 files changed

+50
-38
lines changed

4 files changed

+50
-38
lines changed

packages/cli/lib/lib/webpack/render-html-plugin.js

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const HtmlWebpackExcludeAssetsPlugin = require('html-webpack-exclude-assets-plug
55
const HtmlWebpackPlugin = require('html-webpack-plugin');
66
const prerender = require('./prerender');
77
const createLoadManifest = require('./create-load-manifest');
8-
const { esmImport, warn } = require('../../util');
8+
const { esmImport, tryResolveConfig, warn } = require('../../util');
99

1010
const PREACT_FALLBACK_URL = '/200.html';
1111

@@ -106,9 +106,16 @@ module.exports = async function (config) {
106106
let pages = [{ url: '/' }];
107107

108108
if (config.prerenderUrls) {
109-
if (existsSync(resolve(cwd, config.prerenderUrls))) {
109+
const prerenderUrls = tryResolveConfig(
110+
cwd,
111+
config.prerenderUrls,
112+
config.prerenderUrls === 'prerender-urls.json',
113+
config.verbose
114+
);
115+
116+
if (prerenderUrls) {
110117
try {
111-
let result = esmImport(resolve(cwd, config.prerenderUrls));
118+
let result = esmImport(prerenderUrls);
112119

113120
if (typeof result.default !== 'undefined') {
114121
result = result.default;
@@ -129,17 +136,6 @@ module.exports = async function (config) {
129136
}`
130137
);
131138
}
132-
// don't warn if the default file doesn't exist
133-
} else if (
134-
config.prerenderUrls !== 'prerender-urls.json' ||
135-
config.verbose
136-
) {
137-
warn(
138-
`prerenderUrls file (${resolve(
139-
cwd,
140-
config.prerenderUrls
141-
)}) doesn't exist, using default!`
142-
);
143139
}
144140
}
145141
/**

packages/cli/lib/lib/webpack/transform-config.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { resolve } = require('path');
22
const webpack = require('webpack');
33
const { stat } = require('fs').promises;
4-
const { error, esmImport } = require('../../util');
4+
const { error, esmImport, tryResolveConfig, warn } = require('../../util');
55

66
const FILE = 'preact.config';
77
const EXTENSIONS = ['js', 'json'];
@@ -95,27 +95,26 @@ module.exports = async function (env, webpackConfig, isServer = false) {
9595
env.config !== 'preact.config.js'
9696
? { configFile: env.config, isDefault: false }
9797
: await findConfig(env);
98-
env.config = configFile;
99-
let myConfig = resolve(env.cwd, env.config);
98+
99+
const cliConfig = tryResolveConfig(
100+
env.cwd,
101+
configFile,
102+
isDefault,
103+
env.verbose
104+
);
105+
106+
if (!cliConfig) return;
100107

101108
let m;
102109
try {
103-
m = esmImport(myConfig);
104-
} catch (err) {
105-
const notFound =
106-
err.message.includes('Cannot find module') ||
107-
err.message.includes('Qualified path resolution failed');
108-
if (notFound && isDefault) return;
109-
if (notFound) {
110-
throw new Error(
111-
`Failed to load preact-cli config!\nFile ${env.config} not found.\n`
112-
);
113-
}
114-
throw new Error(
115-
`Failed to load preact-cli config!\n${
116-
env.verbose ? err.stack : err.message
117-
}\n`
110+
m = esmImport(cliConfig);
111+
} catch (error) {
112+
warn(
113+
`Failed to load preact-cli config file, using default!\n${
114+
env.verbose ? error.stack : error.message
115+
}`
118116
);
117+
return;
119118
}
120119

121120
const transformers = parseConfig((m && m.default) || m);
@@ -134,7 +133,7 @@ module.exports = async function (env, webpackConfig, isServer = false) {
134133
options
135134
);
136135
} catch (err) {
137-
throw new Error((`Error at ${myConfig}: \n` + err && err.stack) || err);
136+
throw new Error((`Error at ${cliConfig}: \n` + err && err.stack) || err);
138137
}
139138
}
140139
};

packages/cli/lib/util.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ exports.info = function (text, code) {
3030
code && process.exit(code);
3131
};
3232

33-
exports.warn = function (text, code) {
33+
const warn = (exports.warn = function (text, code) {
3434
process.stdout.write(symbols.warning + yellow(' WARN ') + text + '\n');
3535
code && process.exit(code);
36-
};
36+
});
3737

3838
exports.error = function (text, code = 1) {
3939
process.stderr.write(symbols.error + red(' ERROR ') + text + '\n');
@@ -80,3 +80,12 @@ exports.isPortFree = async function (port) {
8080
return false;
8181
}
8282
};
83+
84+
exports.tryResolveConfig = function (cwd, file, isDefault, verbose) {
85+
const path = resolve(cwd, file);
86+
if (existsSync(path)) {
87+
return path;
88+
} else if (!isDefault || verbose) {
89+
warn(`${resolve(cwd, file)} doesn't exist, using default!`);
90+
}
91+
};

packages/cli/tests/config.test.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,17 @@ describe('config files', () => {
5555
it(`should load the '${dataFormat}' file in ${moduleFormat}`, async () => {
5656
let dir = await subject('multiple-config-files');
5757

58-
await expect(
59-
build(dir, { config: `preactConfig/${moduleFormat}/${dataFormat}` })
60-
).resolves.not.toThrow();
58+
const logSpy = jest.spyOn(process.stdout, 'write');
59+
60+
await build(dir, {
61+
config: `preactConfig/${moduleFormat}/${dataFormat}`,
62+
});
63+
64+
expect(logSpy).not.toHaveBeenCalledWith(
65+
expect.stringContaining(
66+
'Failed to load preact-cli config file, using default!'
67+
)
68+
);
6169
});
6270
});
6371
});

0 commit comments

Comments
 (0)