Skip to content

Commit

Permalink
feat: resolve by target
Browse files Browse the repository at this point in the history
  • Loading branch information
liximomo committed Feb 21, 2020
1 parent efa2d9a commit 4783a40
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 1 deletion.
2 changes: 1 addition & 1 deletion packages/shuvi/src/webpack/webpackManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class WebpackManagerImpl {
});
clientConfig.entry = getClientEntry();
// console.log("clientConfig");
// console.dir(clientConfig.module?.rules);
// console.dir(clientConfig.resolve?.extensions);

const serverConfig = createWepbackConfig(this._app, {
name: WEBPACK_CONFIG_SERVER,
Expand Down
1 change: 1 addition & 0 deletions packages/toolpack/src/webpack/config/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export interface BaseOptions {
srcDirs: string[];
mediaFilename: string;
buildManifestFilename: string;
target?: string;
publicPath?: string;
env?: {
[x: string]: string;
Expand Down
16 changes: 16 additions & 0 deletions packages/toolpack/src/webpack/config/browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import WebpackChain from "webpack-chain";
// import BuildManifestPlugin from "../plugins/build-manifest-plugin";
import { baseWebpackChain, BaseOptions } from "./base";
import { withStyle } from "./parts/style";
import { resolvePreferTarget } from "./parts/resolve";
import { getProjectInfo } from "../../utils/typeScript";

const BIG_LIBRARY_THRESHOLD = 160000; // byte

Expand All @@ -14,9 +16,23 @@ export function createBrowserWebpackChain({
}: BrowserOptions): WebpackChain {
const { dev } = baseOptions;
const chain = baseWebpackChain(baseOptions);
const { useTypeScript } = getProjectInfo(baseOptions.projectRoot);

chain.target("web");
chain.devtool(dev ? "cheap-module-source-map" : false);
const extensions = [
...(useTypeScript ? [".tsx", ".ts"] : []),
".mjs",
".js",
".jsx",
".json",
".wasm"
];
chain.resolve.extensions.merge(
baseOptions.target
? resolvePreferTarget(baseOptions.target, extensions)
: extensions
);
if (dev) {
chain.plugin("private/hmr-plugin").use(webpack.HotModuleReplacementPlugin);
} else {
Expand Down
16 changes: 16 additions & 0 deletions packages/toolpack/src/webpack/config/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,32 @@ import WebpackChain from "webpack-chain";
import { baseWebpackChain, BaseOptions } from "./base";
import { nodeExternals } from "./parts/external";
import { withStyle } from "./parts/style";
import { resolvePreferTarget } from "./parts/resolve";
import { getProjectInfo } from "../../utils/typeScript";

export interface NodeOptions extends BaseOptions {}

export function createNodeWebpackChain({
...baseOptions
}: NodeOptions): WebpackChain {
const chain = baseWebpackChain(baseOptions);
const { useTypeScript } = getProjectInfo(baseOptions.projectRoot);

chain.target("node");
chain.devtool(false);
const extensions = [
...(useTypeScript ? [".tsx", ".ts"] : []),
".js",
".mjs",
".jsx",
".json",
".wasm"
];
chain.resolve.extensions.merge(
baseOptions.target
? resolvePreferTarget(baseOptions.target, extensions)
: extensions
);
chain.output.libraryTarget("commonjs2");
chain.optimization.minimize(false);
chain.externals(nodeExternals({ projectRoot: baseOptions.projectRoot }));
Expand Down
8 changes: 8 additions & 0 deletions packages/toolpack/src/webpack/config/parts/resolve.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export function resolvePreferTarget(target: string, extensions: string[]) {
return extensions.reduce((res, ext) => {
res.push(`.${target}${ext}`);
res.push(ext);

return res;
}, [] as string[]);
}

0 comments on commit 4783a40

Please sign in to comment.