1 | const chalk = require('chalk');
|
2 | const webpack = require('webpack');
|
3 | const path = require('path');
|
4 |
|
5 | const ProgressBarPlugin = require('progress-bar-webpack-plugin');
|
6 | const externals = require('webpack-node-externals');
|
7 |
|
8 | module.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 |
|
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 | };
|