-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.js
97 lines (82 loc) · 1.58 KB
/
util.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
87
88
89
90
91
92
93
94
95
96
97
const _path = require('path')
const path = dir => s => _path.resolve(dir, s)
const license = ({
author,
date,
name,
version,
repository
}) => {
let r = `${name}.js${version? " v"+version: ""}\n`
+ `(c) ${date} ${author}\n`
if(repository)
for(let k in repository) {
let v = repository[k]
r += `${k}: ${v}\n`
}
r += 'Released under the MIT License.'
return r
}
const configWebpack = ({
path,
config,
webpack,
TerserPlugin,
entry,
filename,
libraryTarget,
library,
rules,
min,
externals
}) => {
const r = {
output: {
path: path('dist')
},
resolve: {
extensions: ['.ts', '.tsx', '.js']
},
module: {
rules: [{
test: /\.tsx?$/,
use: 'ts-loader'
}]
}
}
if(entry) r.entry = path(entry)
if(filename) r.output.filename = filename
if(libraryTarget) r.output.libraryTarget = libraryTarget
if(library) r.output.library = library
if(rules)
for(let i of rules)
r.module.rules.push(i)
if(webpack && config) r.plugins = [
new webpack.BannerPlugin({
entryOnly: true,
banner: license(config)
})]
if(min !== undefined && min !== null) {
if(!min) {
r.mode = 'development'
r.devtool = false
} else {
r.mode = 'production'
r.optimization = {
minimize: true
}
if(TerserPlugin) r.optimization.minimizer = [
new TerserPlugin({
extractComments: false
})
]
}
}
if(externals) r.externals = externals
return r
}
module.exports = {
path,
license,
configWebpack
}