@modern-js/builder 2.0.0-beta.2 → 2.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/createBuilder.d.ts +1 -1
- package/dist/createBuilder.js +17 -1
- package/dist/index.d.ts +1 -1
- package/dist/plugins/cleanOutput.d.ts +2 -0
- package/dist/plugins/cleanOutput.js +42 -0
- package/dist/plugins/fileSize.d.ts +4 -0
- package/dist/plugins/fileSize.js +130 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.js +31 -0
- package/dist/plugins/startUrl.d.ts +2 -0
- package/dist/plugins/startUrl.js +64 -0
- package/package.json +4 -3
- package/vitest.config.ts +18 -0
package/dist/createBuilder.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { type BuilderInstance, type BuilderProvider, type CreateBuilderOptions } from '@modern-js/builder-shared';
|
|
2
|
-
export declare function createBuilder(provider:
|
|
2
|
+
export declare function createBuilder<P extends BuilderProvider = BuilderProvider>(provider: P, options: CreateBuilderOptions): Promise<BuilderInstance<P>>;
|
package/dist/createBuilder.js
CHANGED
|
@@ -2,20 +2,36 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createBuilder = void 0;
|
|
4
4
|
const builder_shared_1 = require("@modern-js/builder-shared");
|
|
5
|
+
const plugins_1 = require("./plugins");
|
|
5
6
|
async function createBuilder(provider, options) {
|
|
6
7
|
const builderOptions = (0, builder_shared_1.applyDefaultBuilderOptions)(options);
|
|
7
8
|
const pluginStore = (0, builder_shared_1.createPluginStore)();
|
|
8
|
-
const { build, publicContext, inspectConfig, createCompiler, startDevServer, applyDefaultPlugins, } = await provider({
|
|
9
|
+
const { build, pluginAPI, publicContext, initConfigs, inspectConfig, createCompiler, startDevServer, applyDefaultPlugins, } = await provider({
|
|
9
10
|
pluginStore,
|
|
10
11
|
builderOptions,
|
|
12
|
+
plugins: plugins_1.plugins,
|
|
11
13
|
});
|
|
12
14
|
(0, builder_shared_1.debug)('add default plugins');
|
|
13
15
|
await applyDefaultPlugins(pluginStore);
|
|
14
16
|
(0, builder_shared_1.debug)('add default plugins done');
|
|
15
17
|
return {
|
|
16
18
|
...(0, builder_shared_1.pick)(pluginStore, ['addPlugins', 'removePlugins', 'isPluginExists']),
|
|
19
|
+
...(0, builder_shared_1.pick)(pluginAPI, [
|
|
20
|
+
'onBeforeBuild',
|
|
21
|
+
'onBeforeCreateCompiler',
|
|
22
|
+
'onBeforeStartDevServer',
|
|
23
|
+
'onAfterBuild',
|
|
24
|
+
'onAfterCreateCompiler',
|
|
25
|
+
'onAfterStartDevServer',
|
|
26
|
+
'onDevCompileDone',
|
|
27
|
+
'onExit',
|
|
28
|
+
'getHTMLPaths',
|
|
29
|
+
'getBuilderConfig',
|
|
30
|
+
'getNormalizedConfig',
|
|
31
|
+
]),
|
|
17
32
|
build,
|
|
18
33
|
createCompiler,
|
|
34
|
+
initConfigs,
|
|
19
35
|
inspectConfig,
|
|
20
36
|
startDevServer,
|
|
21
37
|
context: publicContext,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { createBuilder } from './createBuilder';
|
|
2
2
|
export { mergeBuilderConfig } from '@modern-js/builder-shared';
|
|
3
|
-
export type { BuilderMode, BuilderEntry, BuilderTarget, BuilderPlugin, BuilderContext, BuilderInstance, CreateBuilderOptions, InspectConfigOptions, } from '@modern-js/builder-shared';
|
|
3
|
+
export type { BuilderMode, BuilderEntry, BuilderTarget, BuilderPlugin, BuilderContext, BuilderInstance, CreateBuilderOptions, InspectConfigOptions, OnExitFn, OnAfterBuildFn, OnAfterCreateCompilerFn, OnAfterStartDevServerFn, OnBeforeBuildFn, OnBeforeStartDevServerFn, OnBeforeCreateCompilerFn, OnDevCompileDoneFn, ModifyBuilderConfigFn, } from '@modern-js/builder-shared';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.PluginCleanOutput = void 0;
|
|
27
|
+
const PluginCleanOutput = () => ({
|
|
28
|
+
name: 'builder-plugin-clean-output',
|
|
29
|
+
setup(api) {
|
|
30
|
+
const clean = async () => {
|
|
31
|
+
const config = api.getNormalizedConfig();
|
|
32
|
+
if (config.output.cleanDistPath) {
|
|
33
|
+
const { emptyDir } = await Promise.resolve().then(() => __importStar(require('@modern-js/utils')));
|
|
34
|
+
const { distPath } = api.context;
|
|
35
|
+
await emptyDir(distPath);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
api.onBeforeBuild(clean);
|
|
39
|
+
api.onBeforeStartDevServer(clean);
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
exports.PluginCleanOutput = PluginCleanOutput;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.PluginFileSize = exports.filterAsset = void 0;
|
|
30
|
+
/**
|
|
31
|
+
* modified from https://github.com/facebook/create-react-app
|
|
32
|
+
* license at https://github.com/facebook/create-react-app/blob/master/LICENSE
|
|
33
|
+
*/
|
|
34
|
+
const path_1 = __importDefault(require("path"));
|
|
35
|
+
const chalk_1 = __importDefault(require("@modern-js/utils/chalk"));
|
|
36
|
+
const builder_shared_1 = require("@modern-js/builder-shared");
|
|
37
|
+
/** Filter source map files */
|
|
38
|
+
const filterAsset = (asset) => !/\.map$/.test(asset);
|
|
39
|
+
exports.filterAsset = filterAsset;
|
|
40
|
+
const getAssetColor = (size) => {
|
|
41
|
+
if (size > 300 * 1000) {
|
|
42
|
+
return chalk_1.default.bold.red;
|
|
43
|
+
}
|
|
44
|
+
if (size > 100 * 1000) {
|
|
45
|
+
return chalk_1.default.yellow;
|
|
46
|
+
}
|
|
47
|
+
return chalk_1.default.green;
|
|
48
|
+
};
|
|
49
|
+
async function printHeader(longestFileLength, longestLabelLength) {
|
|
50
|
+
const longestLengths = [longestFileLength, longestLabelLength];
|
|
51
|
+
const headerRow = ['File', 'Size', 'Gzipped'].reduce((prev, cur, index) => {
|
|
52
|
+
const length = longestLengths[index];
|
|
53
|
+
let curLabel = cur;
|
|
54
|
+
if (length) {
|
|
55
|
+
curLabel =
|
|
56
|
+
cur.length < length ? cur + ' '.repeat(length - cur.length) : cur;
|
|
57
|
+
}
|
|
58
|
+
return `${prev + curLabel} `;
|
|
59
|
+
}, ' ');
|
|
60
|
+
builder_shared_1.logger.log(chalk_1.default.bold(chalk_1.default.blue(headerRow)));
|
|
61
|
+
}
|
|
62
|
+
async function printFileSizes(stats, distPath) {
|
|
63
|
+
const { fs, filesize, gzipSize, stripAnsi } = await Promise.resolve().then(() => __importStar(require('@modern-js/utils')));
|
|
64
|
+
const formatAsset = (asset) => {
|
|
65
|
+
const contents = fs.readFileSync(path_1.default.join(distPath, asset.name));
|
|
66
|
+
const size = contents.length;
|
|
67
|
+
const gzippedSize = gzipSize.sync(contents);
|
|
68
|
+
return {
|
|
69
|
+
size,
|
|
70
|
+
folder: path_1.default.join(path_1.default.basename(distPath), path_1.default.dirname(asset.name)),
|
|
71
|
+
name: path_1.default.basename(asset.name),
|
|
72
|
+
gzippedSize,
|
|
73
|
+
sizeLabel: filesize(size),
|
|
74
|
+
gzipSizeLabel: getAssetColor(gzippedSize)(filesize(gzippedSize)),
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
const multiStats = 'stats' in stats ? stats.stats : [stats];
|
|
78
|
+
const assets = multiStats
|
|
79
|
+
.map(stats => {
|
|
80
|
+
const origin = stats.toJson({
|
|
81
|
+
all: true,
|
|
82
|
+
assets: true,
|
|
83
|
+
groupAssetsByInfo: false,
|
|
84
|
+
groupAssetsByPath: false,
|
|
85
|
+
groupAssetsByChunk: false,
|
|
86
|
+
groupAssetsByExtension: false,
|
|
87
|
+
groupAssetsByEmitStatus: false,
|
|
88
|
+
});
|
|
89
|
+
const filteredAssets = origin.assets.filter(asset => (0, exports.filterAsset)(asset.name));
|
|
90
|
+
return filteredAssets.map(formatAsset);
|
|
91
|
+
})
|
|
92
|
+
.reduce((single, all) => all.concat(single), []);
|
|
93
|
+
if (assets.length === 0) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
assets.sort((a, b) => b.size - a.size);
|
|
97
|
+
const longestLabelLength = Math.max(...assets.map(a => stripAnsi(a.sizeLabel).length));
|
|
98
|
+
const longestFileLength = Math.max(...assets.map(a => stripAnsi(a.folder + path_1.default.sep + a.name).length));
|
|
99
|
+
builder_shared_1.logger.info(`File sizes after production build:\n`);
|
|
100
|
+
printHeader(longestFileLength, longestLabelLength);
|
|
101
|
+
assets.forEach(asset => {
|
|
102
|
+
let { sizeLabel } = asset;
|
|
103
|
+
const { name, folder, gzipSizeLabel } = asset;
|
|
104
|
+
const fileNameLength = stripAnsi(folder + path_1.default.sep + name).length;
|
|
105
|
+
const sizeLength = stripAnsi(sizeLabel).length;
|
|
106
|
+
if (sizeLength < longestLabelLength) {
|
|
107
|
+
const rightPadding = ' '.repeat(longestLabelLength - sizeLength);
|
|
108
|
+
sizeLabel += rightPadding;
|
|
109
|
+
}
|
|
110
|
+
let fileNameLabel = chalk_1.default.dim(asset.folder + path_1.default.sep) + chalk_1.default.cyan(asset.name);
|
|
111
|
+
if (fileNameLength < longestFileLength) {
|
|
112
|
+
const rightPadding = ' '.repeat(longestFileLength - fileNameLength);
|
|
113
|
+
fileNameLabel += rightPadding;
|
|
114
|
+
}
|
|
115
|
+
builder_shared_1.logger.log(` ${fileNameLabel} ${sizeLabel} ${gzipSizeLabel}`);
|
|
116
|
+
});
|
|
117
|
+
builder_shared_1.logger.log('');
|
|
118
|
+
}
|
|
119
|
+
const PluginFileSize = () => ({
|
|
120
|
+
name: 'builder-plugin-file-size',
|
|
121
|
+
setup(api) {
|
|
122
|
+
api.onAfterBuild(async ({ stats }) => {
|
|
123
|
+
const config = api.getNormalizedConfig();
|
|
124
|
+
if (config.performance.printFileSize && stats) {
|
|
125
|
+
await printFileSizes(stats, api.context.distPath);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
exports.PluginFileSize = PluginFileSize;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const plugins: {
|
|
2
|
+
cleanOutput: () => Promise<import("@modern-js/builder-shared").DefaultBuilderPlugin>;
|
|
3
|
+
startUrl: () => Promise<import("@modern-js/builder-shared").DefaultBuilderPlugin>;
|
|
4
|
+
fileSize: () => Promise<import("@modern-js/builder-shared").DefaultBuilderPlugin>;
|
|
5
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.plugins = void 0;
|
|
27
|
+
exports.plugins = {
|
|
28
|
+
cleanOutput: () => Promise.resolve().then(() => __importStar(require('./cleanOutput'))).then(m => m.PluginCleanOutput()),
|
|
29
|
+
startUrl: () => Promise.resolve().then(() => __importStar(require('./startUrl'))).then(m => m.PluginStartUrl()),
|
|
30
|
+
fileSize: () => Promise.resolve().then(() => __importStar(require('./fileSize'))).then(m => m.PluginFileSize()),
|
|
31
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.PluginStartUrl = void 0;
|
|
30
|
+
const lodash_1 = __importDefault(require("@modern-js/utils/lodash"));
|
|
31
|
+
function PluginStartUrl() {
|
|
32
|
+
return {
|
|
33
|
+
name: 'builder-plugin-start-url',
|
|
34
|
+
async setup(api) {
|
|
35
|
+
let port;
|
|
36
|
+
api.onAfterStartDevServer(async (params) => {
|
|
37
|
+
({ port } = params);
|
|
38
|
+
});
|
|
39
|
+
api.onDevCompileDone(async ({ isFirstCompile }) => {
|
|
40
|
+
if (!isFirstCompile || !port) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const config = api.getNormalizedConfig();
|
|
44
|
+
const { startUrl } = config.dev;
|
|
45
|
+
if (!startUrl) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const { default: open } = await Promise.resolve().then(() => __importStar(require('@modern-js/builder-shared/open')));
|
|
49
|
+
const urls = [];
|
|
50
|
+
if (startUrl === true) {
|
|
51
|
+
const protocol = config.dev.https ? 'https' : 'http';
|
|
52
|
+
urls.push(`${protocol}://localhost:${port}`);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
urls.push(...lodash_1.default.castArray(startUrl));
|
|
56
|
+
}
|
|
57
|
+
for (const url of urls) {
|
|
58
|
+
await open(url);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
exports.PluginStartUrl = PluginStartUrl;
|
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"engines": {
|
|
15
15
|
"node": ">=14.0.0"
|
|
16
16
|
},
|
|
17
|
-
"version": "2.0.0-beta.
|
|
17
|
+
"version": "2.0.0-beta.4",
|
|
18
18
|
"jsnext:source": "./src/index.ts",
|
|
19
19
|
"types": "./dist/index.d.ts",
|
|
20
20
|
"main": "./dist/index.js",
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@modern-js/builder-shared": "2.0.0-beta.
|
|
30
|
+
"@modern-js/builder-shared": "2.0.0-beta.4",
|
|
31
|
+
"@modern-js/utils": "2.0.0-beta.4"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
34
|
"@babel/core": "7.18.0",
|
|
@@ -35,7 +36,7 @@
|
|
|
35
36
|
"@types/babel__preset-env": "^7.9.2",
|
|
36
37
|
"@types/node": "^14",
|
|
37
38
|
"typescript": "^4",
|
|
38
|
-
"@scripts/vitest-config": "2.0.0-beta.
|
|
39
|
+
"@scripts/vitest-config": "2.0.0-beta.4"
|
|
39
40
|
},
|
|
40
41
|
"publishConfig": {
|
|
41
42
|
"registry": "https://registry.npmjs.org/",
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config';
|
|
2
|
+
import { withTestPreset } from '@scripts/vitest-config';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
const config = defineConfig({
|
|
6
|
+
resolve: {
|
|
7
|
+
alias: {
|
|
8
|
+
'~': path.resolve(__dirname),
|
|
9
|
+
'@': path.resolve(__dirname, 'src'),
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
test: {
|
|
13
|
+
root: __dirname,
|
|
14
|
+
environment: 'node',
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export default withTestPreset(config);
|