UNPKG

comindware.core.ui

Version:

Comindware Core UI provides the basic components like editors, lists, dropdowns, popups that we so desperately need while creating Marionette-based single-page applications.

247 lines (240 loc) • 9.29 kB
/* eslint-disable global-require */ /* global require, module */ const webpack = require('webpack'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const cssnano = require('cssnano'); const pathResolver = require('./pathResolver'); const jsFileName = 'core.js'; const jsFileNameMin = 'core.min.js'; const cssFileName = 'core.css'; const cssFileNameMin = 'core.min.css'; const StylelintPlugin = require('stylelint-webpack-plugin'); const babelConfig = require('../babel.config.json'); module.exports = options => { const PRODUCTION = options.uglify; const TEST_COVERAGE = options.env === 'test-coverage'; const TEST = options.env === 'test' || TEST_COVERAGE; const UGLIFY = options.uglify || false; const FONT_LIMIT = PRODUCTION ? 10000 : 1000000; const GRAPHICS_LIMIT = PRODUCTION ? 10000 : 1000000; const webpackConfig = { mode: PRODUCTION ? 'production' : 'development', devtool: TEST ? 'inline-source-map' : 'source-map', module: { rules: [ { enforce: 'pre', test: /\.js$/, loader: 'eslint-loader', exclude: [ pathResolver.compiled(), pathResolver.node_modules(), pathResolver.source('external'), pathResolver.source('collections'), pathResolver.source('services/AjaxService.js'), pathResolver.source('Meta.js'), pathResolver.source('form/editors/impl/dateTime/views/initializeDatePicker.js'), pathResolver.tests(), pathResolver.demo() ], include: [pathResolver.source()], options: { quiet: true, //fix: true, cache: true } }, { test: /\.(ts)|(js)$/, loader: 'babel-loader', exclude: [pathResolver.node_modules()], options: babelConfig }, { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader', { loader: 'postcss-loader', options: { sourceMap: true, plugins: () => { const plugins = [require('postcss-preset-env')()]; if (UGLIFY) { plugins.push( cssnano({ preset: [ 'default', { discardComments: { removeAll: true } } ] }) ); } return plugins; } } } ] }, { test: /\.hbs$/, loader: 'html-loader' }, { test: /\.html$/, loader: 'html-loader' }, { test: /\.woff(\?.*)?$/, loader: 'url-loader', options: { prefix: 'fonts/', name: '[path][name].[ext]', limit: FONT_LIMIT, mimetype: 'application/font-woff' } }, { test: /\.woff2(\?.*)?$/, loader: 'url-loader', options: { prefix: 'fonts/', name: '[path][name].[ext]', limit: FONT_LIMIT, mimetype: 'application/font-woff2' } }, { test: /\.svg(\?.*)?$/, loader: 'url-loader', options: { prefix: 'fonts/', name: '[path][name].[ext]', limit: GRAPHICS_LIMIT, mimetype: 'image/svg+xml' } }, { test: /\.(png|jpg)$/, loader: 'url-loader', options: { limit: GRAPHICS_LIMIT } }, { test: /bootstrap-datetime-picker/, use: [ { loader: 'imports-loader', options: 'jquery' } ] }, { test: /backbone\.marionette\.js/, use: [ { loader: 'expose-loader', options: 'Marionette' } ] }, { test: /backbone\.js/, use: [ { loader: 'expose-loader', options: 'Backbone' } ] }, { test: /moment\.js/, use: [ { loader: 'expose-loader', options: 'moment' } ] }, { test: /handlebars\.js/, use: [ { loader: 'expose-loader', options: 'Handlebars' } ] }, { test: /jquery\.js/, use: [ { loader: 'expose-loader', options: '$' }, { loader: 'expose-loader', options: 'jQuery' } ] } ] }, plugins: [ new MiniCssExtractPlugin({ filename: UGLIFY ? cssFileNameMin : cssFileName }), new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /de|ru|en/), new StylelintPlugin({ files: ['../resources/styles/*.css', '../resources/styles/**/*.css', '../resources/styles/**/**/*.css'], fix: true }) ], resolve: { modules: [pathResolver.source(), pathResolver.node_modules()], alias: { 'backbone.trackit': pathResolver.source('external/backbone.trackit.js'), 'jquery-ui': pathResolver.source('external/jquery-ui.js'), handlebars: 'handlebars/dist/handlebars', localizationMap: pathResolver.compiled('localization/localization.en.json') }, extensions: ['.ts', '.js', '.json'] }, devServer: { noInfo: true, stats: 'minimal' } }; if (!TEST) { webpackConfig.entry = [pathResolver.source('coreApi.ts')]; webpackConfig.output = { path: pathResolver.compiled(), filename: jsFileName, library: 'core', libraryTarget: 'umd' }; } if (TEST_COVERAGE) { webpackConfig.module.rules.push({ test: /\.(j|t)sx?$/, enforce: 'post', exclude: [pathResolver.tests(), pathResolver.node_modules(), pathResolver.source('external')], use: { loader: 'istanbul-instrumenter-loader', options: { esModules: true } } }); } if (PRODUCTION) { webpackConfig.output.filename = UGLIFY ? jsFileNameMin : jsFileName; webpackConfig.devtool = 'source-map'; webpackConfig.plugins.push(new webpack.optimize.OccurrenceOrderPlugin()); } return webpackConfig; };