%PDF- %PDF-
Direktori : /home/opti/workflow/src/public/app-assets/vendors/formBuilder-master/tools/ |
Current File : /home/opti/workflow/src/public/app-assets/vendors/formBuilder-master/tools/webpack.config.js |
const pkg = require('../package.json') const { resolve, join } = require('path') const autoprefixer = require('autoprefixer') const { BannerPlugin, DefinePlugin } = require('webpack') const CompressionPlugin = require('compression-webpack-plugin') const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin const CleanWebpackPlugin = require('clean-webpack-plugin') const HtmlWebpackPlugin = require('html-webpack-plugin') const HtmlWebpackHarddiskPlugin = require('html-webpack-harddisk-plugin') const langFiles = require('formbuilder-languages') const WrapperPlugin = require('wrapper-webpack-plugin') // hack for Ubuntu on Windows try { require('os').networkInterfaces() } catch (e) { require('os').networkInterfaces = () => ({}) } const root = resolve(__dirname, '../') const PRODUCTION = process.argv.includes('production') const ANALYZE = process.argv.includes('--analyze') const devtool = PRODUCTION ? false : 'inline-source-map' const outputDir = resolve(root, 'dist/') const camelCase = str => str.replace(/-([a-z])/g, (m, w) => w.toUpperCase()) const bannerTemplate = ({ chunk }) => { const name = chunk.name.substring(chunk.name.lastIndexOf('/') + 1, chunk.name.length) const banner = { [`jQuery ${camelCase(name)}`]: pkg.homepage, Version: pkg.version, Author: pkg.author, } return Object.entries(banner) .map(([key, val]) => [key, val].join(': ')) .join('\n') } const webpackConfig = { context: outputDir, entry: { 'dist/form-builder': resolve(__dirname, '../', pkg.config.files.formBuilder.js), 'dist/form-render': resolve(__dirname, '../', pkg.config.files.formRender.js), 'demo/assets/js/demo': resolve(__dirname, '../src/demo/', 'js/demo.js'), }, output: { path: root, filename: '[name].min.js', }, module: { rules: [ { enforce: 'pre', test: /\.js$/, exclude: /node_modules/, loader: 'eslint-loader', }, { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader', }, { test: /\.lang$/, loader: 'file-loader?name=[path][name].[ext]&context=./src', }, { test: /\.scss$/, use: [ { loader: 'style-loader', options: { attrs: { class: 'formBuilder-injected-style', }, sourceMap: !PRODUCTION, }, }, { loader: 'css-loader', options: { camelCase: true, minimize: true, sourceMap: !PRODUCTION, }, }, { loader: 'postcss-loader', options: { plugins: [ autoprefixer({ browsers: ['> 1%'], }), ], sourceMap: !PRODUCTION, }, }, { loader: 'sass-loader', options: { sourceMap: !PRODUCTION, }, }, ], }, ], }, plugins: [ new CleanWebpackPlugin(['dist/*', 'demo/assets/js/form-*'], { root: join(__dirname, '..'), }), new WrapperPlugin({ test: /\.js$/, // only wrap output of bundle files with '.js' extension header: '(function ($) { "use strict";\n', footer: '\n})(jQuery);' }), new DefinePlugin({ FB_EN_US: JSON.stringify(langFiles['en-US']), }), new HtmlWebpackPlugin({ template: '../src/demo/index.html', filename: '../demo/index.html', formBuilder: PRODUCTION ? 'assets/js/form-builder.min.js' : 'dist/form-builder.min.js', formRender: PRODUCTION ? 'assets/js/form-render.min.js' : 'dist/form-render.min.js', demo: PRODUCTION ? 'assets/js/demo.min.js' : 'demo/assets/js/demo.min.js', alwaysWriteToDisk: true, inject: false, langFiles: Object.entries(langFiles).map(([key, val]) => ({ locale: key, nativeName: val.NATIVE_NAME, })), }), new HtmlWebpackHarddiskPlugin({ outputPath: './demo/' }), new BannerPlugin({ banner: bannerTemplate, test: /\.js$/ }), new CompressionPlugin({ filename: '[path].gz[query]', algorithm: 'gzip', test: /\.(js)$/, threshold: 10240, minRatio: 0.8, }), ], devtool, resolve: { modules: [resolve(__dirname, 'src'), 'node_modules'], extensions: ['.js', '.scss'], }, devServer: { inline: true, contentBase: 'demo/', noInfo: true, }, } if (ANALYZE) { webpackConfig.plugins.push(new BundleAnalyzerPlugin()) } module.exports = webpackConfig