UNPKG

polymerx-cli

Version:

Unlock the power of Polymer 3, Web Components and modern web tools.

190 lines (174 loc) 6.44 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _path = require("path"); var _findNodeModules = _interopRequireDefault(require("find-node-modules")); var _webpack = _interopRequireDefault(require("webpack")); var _webpackMerge = _interopRequireDefault(require("webpack-merge")); var _workboxWebpackPlugin = require("workbox-webpack-plugin"); var _copyWebpackPlugin = _interopRequireDefault(require("copy-webpack-plugin")); var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin")); var _htmlWebpackExcludeAssetsPlugin = _interopRequireDefault(require("html-webpack-exclude-assets-plugin")); var _scriptExtHtmlWebpackPlugin = _interopRequireDefault(require("script-ext-html-webpack-plugin")); var _cleanWebpackPlugin = _interopRequireDefault(require("clean-webpack-plugin")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const renderHtmlPlugins = (outputPath, isProd, src) => [new _htmlWebpackPlugin.default({ filename: (0, _path.resolve)(outputPath, 'index.html'), template: `!!ejs-loader!${(0, _path.resolve)(src, 'index.html')}`, minify: isProd && { collapseWhitespace: true, removeScriptTypeAttributes: true, removeRedundantAttributes: true, removeStyleLinkTypeAttributes: true, removeComments: true }, inject: true, compile: true, excludeAssets: [/(bundle|polyfills)(\..*)?\.js$/], paths: { webcomponents: './vendor/webcomponents-loader.js' } }), new _htmlWebpackExcludeAssetsPlugin.default(), new _scriptExtHtmlWebpackPlugin.default({ defaultAttribute: 'defer' })]; const shared = argv => { const { isProd, src, srcDir, dest, pkg, cwd, https, workers } = argv; const ENV = isProd ? 'production' : 'development'; const OUTPUT_PATH = isProd ? (0, _path.resolve)(dest || 'dist') : (0, _path.resolve)(src || 'src'); const NODE_MODULES = (0, _findNodeModules.default)({ cwd, relative: false }); const HOST = process.env.HOST || argv.host; const PORT = process.env.PORT || argv.port; const FULL_HOST = `http://${HOST}:${PORT}`; const ENTRY = isProd ? [(0, _path.resolve)(src || 'src')] : [OUTPUT_PATH].concat([`webpack-dev-server/client?${FULL_HOST}`, 'webpack/hot/dev-server']); const processEnv = { NODE_ENV: JSON.stringify(ENV), appVersion: JSON.stringify(pkg.version) }; const copyStatics = { copyWebcomponents: [{ from: (0, _path.resolve)('./node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js'), to: (0, _path.join)(OUTPUT_PATH, 'vendor'), flatten: true }, { from: (0, _path.resolve)('./node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js'), to: (0, _path.join)(OUTPUT_PATH, 'vendor'), flatten: true }, { from: (0, _path.resolve)('./node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-ce.js'), to: (0, _path.join)(OUTPUT_PATH, 'vendor', 'bundles'), flatten: true }, { from: (0, _path.resolve)('./node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce.js'), to: (0, _path.join)(OUTPUT_PATH, 'vendor', 'bundles'), flatten: true }, { from: (0, _path.resolve)('./node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js'), to: (0, _path.join)(OUTPUT_PATH, 'vendor', 'bundles'), flatten: true }, { from: (0, _path.resolve)('./node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd.js'), to: (0, _path.join)(OUTPUT_PATH, 'vendor', 'bundles'), flatten: true }], copyOthers: [{ from: 'assets/**', context: (0, _path.resolve)(srcDir), to: OUTPUT_PATH }, { from: (0, _path.resolve)(srcDir, 'index.html'), to: OUTPUT_PATH, flatten: true }, { from: (0, _path.resolve)(srcDir, 'manifest.json'), to: OUTPUT_PATH, flatten: true }] }; const sharedPlugins = [new _webpack.default.DefinePlugin({ 'process.env': processEnv }), ...renderHtmlPlugins(OUTPUT_PATH, isProd, src)]; const devPlugins = [new _copyWebpackPlugin.default(copyStatics.copyWebcomponents), new _webpack.default.HotModuleReplacementPlugin(), new _webpack.default.NamedModulesPlugin()]; const buildPlugins = [new _cleanWebpackPlugin.default([(0, _path.resolve)(OUTPUT_PATH)], { allowExternal: true, verbose: false }), new _copyWebpackPlugin.default([].concat(copyStatics.copyWebcomponents, copyStatics.copyOthers))].concat(workers ? new _workboxWebpackPlugin.GenerateSW({ swDest: (0, _path.join)(OUTPUT_PATH, 'sw.js'), skipWaiting: true }) : []); const plugins = sharedPlugins.concat(isProd ? buildPlugins : devPlugins); return { mode: ENV, entry: ENTRY, output: { path: OUTPUT_PATH, filename: 'bundle.js' }, devtool: 'cheap-source-map', resolve: { modules: [...NODE_MODULES, (0, _path.resolve)(__dirname, '../../../node_modules')] }, resolveLoader: { modules: [...NODE_MODULES, (0, _path.resolve)(__dirname, '../../../node_modules')] }, module: { rules: [{ test: /\.html$/, use: ['raw-loader'] }, { test: /\.pcss$/, use: ['raw-loader', 'postcss-loader'] }, { test: /\.js$/, exclude: /(node_modules)/, use: { loader: 'babel-loader', options: { presets: [[require.resolve('@babel/preset-env'), { targets: { browsers: ['>=1%', 'not ie 11', 'not op_mini all'] }, debug: !isProd }]], plugins: [[require.resolve('@babel/plugin-syntax-object-rest-spread'), { useBuiltIns: true }], [require.resolve('@babel/plugin-syntax-dynamic-import')]] } } }] }, plugins, devServer: { hot: true, compress: true, contentBase: OUTPUT_PATH, overlay: { errors: true }, stats: 'minimal', port: PORT, host: HOST, https, disableHostCheck: true, historyApiFallback: true, quiet: true, clientLogLevel: 'none', watchOptions: { ignored: [(0, _path.resolve)(cwd, 'dist'), (0, _path.resolve)(cwd, 'node_modules')] } } }; }; var _default = (argv = {}) => (0, _webpackMerge.default)(shared(argv)); exports.default = _default;