UNPKG

2.71 kBJavaScriptView Raw
1const chalk = require('chalk');
2const webpack = require('webpack');
3const path = require('path');
4
5const ProgressBarPlugin = require('progress-bar-webpack-plugin');
6const externals = require('webpack-node-externals');
7
8module.exports = function (options) {
9 if (typeof options.extensions === 'string') {
10 options.extensions = options.extensions.split(',');
11 }
12
13 const sourceDir = options['source-directory'];
14 const extensions = options.extensions;
15 const destDir = options['dest-directory'];
16 const input = options.input;
17 const output = options.output;
18 const cwd = options.cwd;
19
20 return {
21 target: 'node',
22 externals: [ externals() ],
23 devtool: 'inline-source-map',
24 context: path.join(cwd, sourceDir),
25 entry: {
26 js: path.join(cwd, input),
27 },
28 output: {
29 path: path.join(cwd, destDir),
30 filename: output,
31 libraryTarget: 'commonjs'
32 },
33 module: {
34 loaders: [
35 {
36 test: /\.js$/,
37 exclude: /node_modules/,
38 loader: 'babel-loader',
39 query: {
40 cacheDirectory: true,
41 presets: [
42 [ require.resolve('babel-preset-es2015'), {
43 loose: true,
44 modules: false
45 } ],
46 require.resolve('babel-preset-stage-2'),
47 ],
48 plugins: [
49 'syntax-decorators',
50 'transform-class-properties',
51 'transform-decorators-legacy',
52 'transform-decorators',
53 ].map(p => require.resolve(`babel-plugin-${p}`))
54 }
55 }
56 ]
57 },
58 resolve: {
59 extensions: extensions,
60 modules: [
61 path.join(cwd, sourceDir),
62 ]
63 },
64 plugins: [
65 new ProgressBarPlugin({
66 clear: false,
67 format: 'build [:bar] ' + chalk.green(':percent') + ' (:elapsed seconds)',
68 }),
69 //new webpack.ProgressPlugin(),
70 new webpack.LoaderOptionsPlugin({
71 minimize: true,
72 debug: true
73 }),
74 new webpack.BannerPlugin({
75 banner: 'require("source-map-support").install();require("regenerator-runtime/runtime");',
76 raw: true,
77 entryOnly: false,
78 }),
79 new webpack.optimize.UglifyJsPlugin({
80 compress: {
81 warnings: false
82 },
83 debug: true,
84 output: {
85 comments: false
86 },
87 sourceMap: true
88 }),
89 ],
90 node: {
91 global: false,
92 process: false,
93 Buffer: false,
94 crypto: false,
95 module: false,
96 clearImmediate: false,
97 setImmediate: false,
98 clearTimeout: false,
99 setTimeout: false,
100 os: false,
101 _filename: true,
102 __dirname: true,
103 }
104 };
105};