UNPKG

6.29 kBJavaScriptView Raw
1import "core-js/modules/es6.array.for-each";
2import "core-js/modules/es6.array.filter";
3import "core-js/modules/es6.symbol";
4import "core-js/modules/web.dom.iterable";
5import "core-js/modules/es6.array.is-array";
6import "core-js/modules/es6.array.reduce";
7import "core-js/modules/es6.regexp.split";
8import "core-js/modules/es6.function.name";
9
10function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
11
12function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
14function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
15
16function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
17
18function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
19
20function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
21
22import ExtractTextPlugin from 'extract-text-webpack-plugin';
23import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
24import { existsSync } from 'fs';
25import { join, resolve } from 'path';
26import autoprefixer from 'autoprefixer';
27import FriendlyErrorsWebpackPlugin from 'friendly-errors-webpack-plugin';
28import ImageminPlugin from 'imagemin-webpack-plugin';
29import getBabelCommonConfig from './get-babel-common-config';
30export default function getWebpackCommonConfig(args) {
31 var pkgPath = join(args.cwd, 'package.json');
32 var pkg = existsSync(pkgPath) ? require(pkgPath) : {};
33
34 if (!pkg.name) {
35 var _args$cwd$split$splic = args.cwd.split('/').splice(-1),
36 _args$cwd$split$splic2 = _slicedToArray(_args$cwd$split$splic, 1),
37 name = _args$cwd$split$splic2[0];
38
39 pkg.name = name;
40 }
41
42 if (!pkg.entry) {
43 pkg.entry = _defineProperty({}, pkg.name, './src');
44 }
45
46 var jsFileName = args.hash ? 'js/[name]-[chunkhash:5].js' : 'js/[name].js';
47 var cssFileName = args.hash ? 'css/[name]-[contenthash:5].css' : 'css/[name].css';
48 var silent = args.silent === true;
49 var babelOptions = getBabelCommonConfig(args);
50 var browsersObj = {};
51
52 if (!pkg.browserslist) {
53 browsersObj.browsers = ['last 2 versions', 'Firefox ESR', '> 1%', 'ie >= 9', 'iOS >= 8', 'Android >= 4'];
54 }
55
56 var postcssOptions = {
57 sourceMap: true,
58 plugins: [autoprefixer(browsersObj)]
59 };
60 var emptyBuildins = ['child_process', 'cluster', 'dgram', 'dns', 'fs', 'module', 'net', 'readline', 'repl', 'tls'];
61 var browser = pkg.browser || {};
62 var node = emptyBuildins.reduce(function (obj, name) {
63 if (!(name in browser)) {
64 return _objectSpread({}, obj, _defineProperty({}, name, 'empty'));
65 }
66
67 return obj;
68 }, {});
69 var config = {
70 options: {
71 babel: babelOptions,
72 postcss: postcssOptions
73 },
74 output: {
75 path: pkg.outputPath ? join(process.cwd(), "./".concat(pkg.outputPath, "/").concat(pkg.name, "/").concat(pkg.version)) : join(process.cwd(), './dist/'),
76 filename: jsFileName,
77 chunkFilename: jsFileName
78 },
79 devtool: args.dev ? 'source-map' : args.devtool,
80 resolve: {
81 modules: ['./', 'node_modules', resolve(__dirname, '../node_modules')],
82 extensions: ['.ts', '.tsx', '.js', '.jsx']
83 },
84 resolveLoader: {
85 modules: ['node_modules', resolve(__dirname, '../node_modules')]
86 },
87 entry: pkg.entry,
88 node: node,
89 module: {
90 rules: [{
91 test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
92 loader: 'url-loader',
93 options: {
94 name: 'font/[name]-[hash:5].[ext]',
95 limit: 8192,
96 minetype: 'application/font-woff'
97 }
98 }, {
99 test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
100 loader: 'url-loader',
101 options: {
102 name: 'font/[name]-[hash:5].[ext]',
103 limit: 8192,
104 minetype: 'application/font-woff'
105 }
106 }, {
107 test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
108 loader: 'url-loader',
109 options: {
110 name: 'font/[name]-[hash:5].[ext]',
111 limit: 8192,
112 minetype: 'application/octet-stream'
113 }
114 }, {
115 test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
116 loader: 'url-loader',
117 options: {
118 name: 'font/[name]-[hash:5].[ext]',
119 limit: 8192,
120 minetype: 'application/vnd.ms-fontobject'
121 }
122 }, {
123 test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
124 loader: 'url-loader',
125 options: {
126 name: 'img/[name]-[hash:5].[ext]',
127 limit: 8192,
128 minetype: 'image/svg+xml'
129 }
130 }, {
131 test: /\.(png|jpg|jpeg|gif)(\?v=\d+\.\d+\.\d+)?$/i,
132 loader: 'url-loader',
133 options: {
134 name: 'img/[name]-[hash:5].[ext]',
135 limit: 8192
136 }
137 }, {
138 test: /\.module\.(html|htm|txt|tpl)$/,
139 loader: 'raw-loader'
140 }]
141 },
142 plugins: [new ExtractTextPlugin({
143 filename: cssFileName,
144 disable: !!args.dev,
145 allChunks: true
146 }), new CaseSensitivePathsPlugin(), new FriendlyErrorsWebpackPlugin({
147 onErrors: function onErrors(severity, errors) {
148 if (silent) return;
149
150 if (severity !== 'error') {
151 return;
152 }
153
154 var error = errors[0];
155 console.error("".concat(severity, " : ").concat(error.name));
156 }
157 }), new ImageminPlugin({
158 disable: !!args.dev,
159 pngquant: {
160 quality: '95-100'
161 },
162 jpegtran: {
163 progressive: true
164 }
165 })]
166 };
167 return config;
168}
\No newline at end of file