UNPKG

ae-biu

Version:

Born For AE, Born To Do

311 lines (250 loc) 9.07 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _webpack = require('webpack'); var _webpack2 = _interopRequireDefault(_webpack); var _htmlWebpackPlugin = require('html-webpack-plugin'); var _htmlWebpackPlugin2 = _interopRequireDefault(_htmlWebpackPlugin); var _copyWebpackPlugin = require('copy-webpack-plugin'); var _copyWebpackPlugin2 = _interopRequireDefault(_copyWebpackPlugin); var _extractTextWebpackPlugin = require('extract-text-webpack-plugin'); var _extractTextWebpackPlugin2 = _interopRequireDefault(_extractTextWebpackPlugin); var _optimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin'); var _optimizeCssAssetsWebpackPlugin2 = _interopRequireDefault(_optimizeCssAssetsWebpackPlugin); var _faviconsWebpackPlugin = require('favicons-webpack-plugin'); var _faviconsWebpackPlugin2 = _interopRequireDefault(_faviconsWebpackPlugin); var _flat = require('flat'); var _flat2 = _interopRequireDefault(_flat); var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _logger = require('../utils/logger'); var _logger2 = _interopRequireDefault(_logger); var _postcss = require('./postcss.config'); var _postcss2 = _interopRequireDefault(_postcss); var _less = require('./less.config'); var _less2 = _interopRequireDefault(_less); var _paths = require('../utils/paths'); var _package = require('../utils/package'); var _package2 = _interopRequireDefault(_package); var _getPolyfills = require('../utils/get-polyfills'); var _getPolyfills2 = _interopRequireDefault(_getPolyfills); var _readDirRecursive = require('../utils/read-dir-recursive'); var _webpack3 = require('./webpack.common'); var _webpack4 = _interopRequireDefault(_webpack3); var _constants = require('../utils/constants'); var _useCdn = require('../utils/use-cdn'); var _useCdn2 = _interopRequireDefault(_useCdn); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _pkg$ae = _package2.default.ae, ae = _pkg$ae === undefined ? {} : _pkg$ae; var _ae$languages = ae.languages, LANGS = _ae$languages === undefined ? _constants.DEFAULT_LANG_MAP : _ae$languages, _ae$output = ae.output, dist = _ae$output === undefined ? 'dist' : _ae$output, ORG_NAME = ae.org, _ae$addHashForI18N = ae.addHashForI18N, addHashForI18N = _ae$addHashForI18N === undefined ? false : _ae$addHashForI18N; var distDir = _path2.default.resolve(_paths.workDir, dist); var staticDir = _path2.default.resolve(_paths.srcDir, 'static'); var modulesDir = _path2.default.resolve(_paths.srcDir, 'modules'); var modulesI18NTransformer = function modulesI18NTransformer(content) { return (0, _stringify2.default)((0, _flat2.default)(JSON.parse(content))); }; var copyPluginPatterns = [{ from: staticDir, ignore: 'locale/**/*.json' }, { context: staticDir, from: 'locale/**/*.json', to: addHashForI18N ? '[path][name].[hash].[ext]' : '' }, { context: modulesDir, from: '**/*.json', to: addHashForI18N ? 'locale/[path][name].[hash].[ext]' : 'locale', transform: modulesI18NTransformer }]; console.log(); var i18nHashMap = {}; if (addHashForI18N) { _logger2.default.info('Create hash for i18n files\n'); var staticI18nFiles = (0, _readDirRecursive.readDirRecursiveSync)(staticDir, '*.json'); var moduleI18nFiles = (0, _readDirRecursive.readDirRecursiveSync)(modulesDir, '*.json'); var files = [].concat((0, _toConsumableArray3.default)(staticI18nFiles), (0, _toConsumableArray3.default)(moduleI18nFiles)); files.map(function (file) { var content = _fs2.default.readFileSync(file, { encoding: 'utf8' }); if (~moduleI18nFiles.indexOf(file)) { content = modulesI18NTransformer(content); } var hash = _crypto2.default.createHash('md5'); var hashSum = hash.update(content).digest('hex'); var lang = _path2.default.basename(file, '.json'); var scope = _path2.default.dirname(file).replace('' + modulesDir, '').replace(staticDir + '/locale', '').replace('/', ''); var key = scope + '/' + lang; i18nHashMap[key] = lang + '.' + hashSum; }); } _logger2.default.info('Create configuration for NODE_ENV: production\n'); var SDP_ENV = (process.env.SDP_ENV || 'test').trim(); _logger2.default.info('Project build for SDP_ENV: ' + SDP_ENV + '\n'); var polyfills = (0, _getPolyfills2.default)(); function getCSSLoader(lang, i18nLangs) { var loaders = [{ loader: 'style-loader' }, { loader: 'css-loader', options: { importLoaders: 1 } }, { loader: 'postcss-loader', options: (0, _postcss2.default)(i18nLangs) }]; if (lang === 'less') { loaders.push({ loader: 'less-loader', options: _less2.default }); } return _extractTextWebpackPlugin2.default.extract({ fallback: loaders.shift().loader, use: loaders }); } var webpackConfig = { target: 'web', entry: { app: [].concat((0, _toConsumableArray3.default)(polyfills), [_path2.default.resolve(_paths.srcDir, 'index.js')]) }, output: { path: distDir, publicPath: '', filename: '[name].[chunkhash].js', chunkFilename: '[id].[chunkhash].js' }, resolve: { modules: [_paths.srcDir, 'node_modules'], extensions: ['.js', '.jsx', '.ts', '.tsx', '.css', 'less'], alias: (0, _extends3.default)({ '~': _paths.srcDir }, _webpack4.default.alias) }, node: { fs: 'empty', net: 'empty' }, devtool: 'source-map', performance: { hints: 'warning' }, module: { rules: [{ test: /\.jsx?$/, include: _paths.srcDir, use: [{ loader: 'eslint-loader', options: { emitWarning: false, formatter: require('eslint-friendly-formatter') } }], enforce: 'pre' }, { test: /\.jsx?$/, include: [_paths.srcDir, /@ae\.sdp\.nd[/\\](?!node_modules)/, /[/\\]node_modules.*[/\\]((lodash-)?es)[/\\](?!node_modules)/], use: 'babel-loader' }, { test: /\.tsx?$/, include: [_paths.srcDir, /@ae\.sdp\.nd[/\\](?!node_modules)/], use: [{ loader: 'babel-loader' }, { loader: 'ts-loader', options: { transpileOnly: true } }] }, { test: /\.css$/, use: getCSSLoader('css', LANGS) }, { test: /\.less$/, use: getCSSLoader('less', LANGS) }, { test: /\.(png|jpg|gif|svg|woff2?|eot|ttf)(\?.*)?$/, use: [{ loader: 'url-loader', options: { limit: 8192, name: '[name].[ext]?[hash:7]' } }] }] }, plugins: [].concat((0, _toConsumableArray3.default)(_webpack4.default.plugins), [new _webpack2.default.DefinePlugin({ 'process.env.NODE_ENV': (0, _stringify2.default)('production'), 'process.env.SDP_ENV': (0, _stringify2.default)(SDP_ENV), 'process.env.LANGS': (0, _stringify2.default)(LANGS), 'process.env.I18N': (0, _stringify2.default)(i18nHashMap) }), new _htmlWebpackPlugin2.default({ SDP_ENV: process.env.SDP_ENV, ORG_NAME: ORG_NAME, CDN: ae.cdn || {}, filename: 'index.html', template: _paths.tplPath, title: _package2.default.name + ' - ' + _package2.default.description, hash: false, inject: !(0, _useCdn2.default)(_package2.default.cdn, process.env.SDP_ENV), minify: { collapseWhitespace: false, minifyJS: false } }), new _copyWebpackPlugin2.default(copyPluginPatterns, { ignore: ['README.md'] }), new _faviconsWebpackPlugin2.default({ logo: _path2.default.resolve(_paths.srcDir, 'assets/favicon.svg'), prefix: 'icons-[hash:7]/', icons: { android: false, appleIcon: false, appleStartup: false, coast: false, favicons: true, firefox: false, opengraph: false, twitter: false, yandex: false, windows: true } }), new _webpack2.default.ContextReplacementPlugin(/moment[\\/]locale$/, /^\.\/(zh-cn|en-us)$/), new _webpack2.default.LoaderOptionsPlugin({ minimize: true, options: { context: _paths.workDir } }), new _webpack2.default.optimize.UglifyJsPlugin({ compress: { unused: true, dead_code: true, warnings: false }, sourceMap: true }), new _optimizeCssAssetsWebpackPlugin2.default({ cssProcessorOptions: { safe: true } }), new _extractTextWebpackPlugin2.default({ filename: '[name].[contenthash].css', allChunks: true })]) }; exports.default = webpackConfig; module.exports = exports['default'];