UNPKG

6.18 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8
9var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
10
11exports.default = getWebpackCommonConfig;
12
13var _webpack = require('webpack');
14
15var _webpack2 = _interopRequireDefault(_webpack);
16
17var _extractTextWebpackPlugin = require('extract-text-webpack-plugin');
18
19var _extractTextWebpackPlugin2 = _interopRequireDefault(_extractTextWebpackPlugin);
20
21var _getBabelCommonConfig = require('./getBabelCommonConfig');
22
23var _getBabelCommonConfig2 = _interopRequireDefault(_getBabelCommonConfig);
24
25var _getTSCommonConfig = require('./getTSCommonConfig');
26
27var _getTSCommonConfig2 = _interopRequireDefault(_getTSCommonConfig);
28
29var _fs = require('fs');
30
31var _path = require('path');
32
33var _rucksackCss = require('rucksack-css');
34
35var _rucksackCss2 = _interopRequireDefault(_rucksackCss);
36
37var _autoprefixer = require('autoprefixer');
38
39var _autoprefixer2 = _interopRequireDefault(_autoprefixer);
40
41function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
42
43function _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; }
44
45function getWebpackCommonConfig(args) {
46 var pkgPath = (0, _path.join)(args.cwd, 'package.json');
47 var pkg = (0, _fs.existsSync)(pkgPath) ? require(pkgPath) : {};
48
49 var jsFileName = args.hash ? '[name]-[chunkhash].js' : '[name].js';
50 var cssFileName = args.hash ? '[name]-[chunkhash].css' : '[name].css';
51 var commonName = args.hash ? 'common-[chunkhash].js' : 'common.js';
52
53 var babelQuery = (0, _getBabelCommonConfig2.default)();
54 var tsQuery = (0, _getTSCommonConfig2.default)();
55 tsQuery.declaration = false;
56
57 var theme = {};
58 if (pkg.theme && typeof pkg.theme === 'string') {
59 var cfgPath = pkg.theme;
60 // relative path
61 if (cfgPath.charAt(0) === '.') {
62 cfgPath = (0, _path.resolve)(args.cwd, cfgPath);
63 }
64 var getThemeConfig = require(cfgPath);
65 theme = getThemeConfig();
66 } else if (pkg.theme && _typeof(pkg.theme) === 'object') {
67 theme = pkg.theme;
68 }
69
70 var emptyBuildins = ['child_process', 'cluster', 'dgram', 'dns', 'fs', 'module', 'net', 'readline', 'repl', 'tls'];
71
72 var browser = pkg.browser || {};
73
74 var node = emptyBuildins.reduce(function (obj, name) {
75 if (!(name in browser)) {
76 return _extends({}, obj, _defineProperty({}, name, 'empty'));
77 }
78 return obj;
79 }, {});
80
81 return {
82
83 babel: babelQuery,
84 ts: {
85 transpileOnly: true,
86 compilerOptions: tsQuery
87 },
88
89 output: {
90 path: (0, _path.join)(process.cwd(), './dist/'),
91 filename: jsFileName,
92 chunkFilename: jsFileName
93 },
94
95 devtool: args.devtool,
96
97 resolve: {
98 modulesDirectories: ['node_modules', (0, _path.join)(__dirname, '../node_modules')],
99 extensions: ['', '.web.tsx', '.web.ts', '.web.jsx', '.web.js', '.ts', '.tsx', '.js', '.jsx', '.json']
100 },
101
102 resolveLoader: {
103 modulesDirectories: ['node_modules', (0, _path.join)(__dirname, '../node_modules')]
104 },
105
106 entry: pkg.entry,
107
108 node: node,
109
110 module: {
111 noParse: [/moment.js/],
112 loaders: [{
113 test: /\.js$/,
114 exclude: /node_modules/,
115 loader: 'babel',
116 query: babelQuery
117 }, {
118 test: /\.jsx$/,
119 loader: 'babel',
120 query: babelQuery
121 }, {
122 test: /\.tsx?$/,
123 loaders: ['babel', 'ts']
124 }, {
125 test: function test(filePath) {
126 return (/\.css$/.test(filePath) && !/\.module\.css$/.test(filePath)
127 );
128 },
129
130 loader: _extractTextWebpackPlugin2.default.extract('css?sourceMap&-restructuring&-autoprefixer!' + 'postcss-loader')
131 }, {
132 test: /\.module\.css$/,
133 loader: _extractTextWebpackPlugin2.default.extract('css?sourceMap&-restructuring&modules&localIdentName=[local]___[hash:base64:5]&-autoprefixer!' + 'postcss-loader')
134 }, {
135 test: function test(filePath) {
136 return (/\.less$/.test(filePath) && !/\.module\.less$/.test(filePath)
137 );
138 },
139
140 loader: _extractTextWebpackPlugin2.default.extract('css?sourceMap&-autoprefixer!' + 'postcss-loader!' + ('less-loader?{"sourceMap":true,"modifyVars":' + JSON.stringify(theme) + '}'))
141 }, {
142 test: /\.module\.less$/,
143 loader: _extractTextWebpackPlugin2.default.extract('css?sourceMap&modules&localIdentName=[local]___[hash:base64:5]&-autoprefixer!' + 'postcss-loader!' + ('less-loader?{"sourceMap":true,"modifyVars":' + JSON.stringify(theme) + '}'))
144 }, { test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&minetype=application/font-woff' }, { test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&minetype=application/font-woff' }, { test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&minetype=application/octet-stream' }, { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: 'file' }, { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&minetype=image/svg+xml' }, { test: /\.(png|jpg|jpeg|gif)(\?v=\d+\.\d+\.\d+)?$/i, loader: 'url?limit=10000' }, { test: /\.json$/, loader: 'json' }, { test: /\.html?$/, loader: 'file?name=[name].[ext]' }]
145 },
146
147 postcss: [(0, _rucksackCss2.default)(), (0, _autoprefixer2.default)({
148 browsers: ['last 2 versions', 'Firefox ESR', '> 1%', 'ie >= 8', 'iOS >= 8', 'Android >= 4']
149 })],
150
151 plugins: [new _webpack2.default.optimize.CommonsChunkPlugin('common', commonName), new _extractTextWebpackPlugin2.default(cssFileName, {
152 disable: false,
153 allChunks: true
154 }), new _webpack2.default.optimize.OccurenceOrderPlugin()]
155 };
156}
157module.exports = exports['default'];
\No newline at end of file