forked from jestjs/jest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbrowserBuild.js
86 lines (80 loc) · 1.98 KB
/
browserBuild.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
const path = require('path');
const webpack = require('webpack');
const camelCase = require('camelcase');
const rimraf = require('rimraf');
const transformOptions = require('../babel.config.js');
const babelEs5Options = {
// Dont load other config files
babelrc: false,
configFile: false,
overrides: transformOptions.overrides,
plugins: ['@babel/plugin-transform-strict-mode'],
presets: [
[
'@babel/preset-env',
{
// Required for Webpack
modules: 'cjs',
shippedProposals: true,
// Target ES5
targets: 'IE 11',
},
],
],
};
function browserBuild(pkgName, entryPath, destination) {
rimraf.sync(destination);
return new Promise((resolve, reject) => {
webpack(
/* eslint-disable sort-keys */
{
mode: 'development',
devtool: 'source-map',
entry: entryPath,
output: {
path: path.dirname(destination),
library: camelCase(pkgName),
libraryTarget: 'umd',
filename: path.basename(destination),
},
module: {
rules: [
{
test: /\.[jt]sx?$/,
loader: 'babel-loader',
options: babelEs5Options,
},
],
},
resolve: {
alias: {
chalk: path.resolve(
__dirname,
'../packages/expect/build/fakeChalk.js'
),
},
extensions: ['.js', '.json', '.ts'],
},
node: {
fs: 'empty',
},
},
/* eslint-enable */
(err, stats) => {
if (err || stats.hasErrors()) {
reject(err || stats.toString());
return;
}
resolve(stats);
}
);
});
}
module.exports = browserBuild;