diff --git a/index.js b/index.js index 948c744..00aa6c1 100644 --- a/index.js +++ b/index.js @@ -16,118 +16,119 @@ const glob = require('glob') * @link https://git.node001.net/tiny-components/webpack.git * */ -module.exports = function tinyComponentsWebpack(files, options = {}) { - // merge options with defaults - const defaults = Object.assign({ - context: path.resolve(process.cwd(), ''), - destination: path.resolve(process.cwd(), 'public'), - publicPath: '/', - purge: { - src: path.join(__dirname, 'js'), - safelist: [] - } - }, options) + module.exports = function tinyComponentsWebpack(files, options = {}) { - const config = { - context: defaults.context, - entry: files, - output: { - path: defaults.destination, - filename: 'js/[name].js', - publicPath: defaults.publicPath - }, + // merge options with defaults + const defaults = Object.assign({ + context: path.resolve(process.cwd(), ''), + destination: path.resolve(process.cwd(), 'public'), + publicPath: '/', + purge: { + src: path.join(__dirname, 'js') + }, + plugins: [] + }, options) - resolve: { - modules: ['node_modules'], - }, + const config = { + context: defaults.context, + entry: files, + output: { + path: defaults.destination, + filename: 'js/[name].js', + publicPath: defaults.publicPath + }, - optimization: { - removeEmptyChunks: true, - minimize: true, - minimizer: [ - new TerserPlugin({ - terserOptions: { - output: { - comments: false, - }, - }, - extractComments: false - }) - ] - }, + resolve: { + modules: ['node_modules'], + }, - module: { - rules: [{ - test: /\.(css|scss)$/, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader', - options: { url: false } - }, - 'sass-loader' - ] - },{ - test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/, - type: 'asset/resource', - generator: { - filename: "fonts/[name].[ext]", - } - }] - }, + optimization: { + removeEmptyChunks: true, + minimize: true, + minimizer: [ + new TerserPlugin({ + terserOptions: { + output: { + comments: false, + }, + }, + extractComments: false + }) + ] + }, - plugins: [ - new RemoveEmptyScriptsPlugin(), - new MiniCssExtractPlugin({ - filename: 'css/[name].css', - }), - new PurgeCSSPlugin({ - paths: glob.sync(`${defaults.purge.src}/**/*`, { nodir: true }), - safelist: defaults.purge.safelist - }), - new ManifestPlugin({ - filename: 'assets-manifest.json', - context: defaults.context - }) - ], - } + module: { + rules: [{ + test: /\.(css|scss)$/, + use: [ + MiniCssExtractPlugin.loader, + { + loader: 'css-loader', + options: { url: false } + }, + 'sass-loader' + ] + },{ + test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/, + type: 'asset/resource', + generator: { + filename: "fonts/[name].[ext]", + } + }] + } + } - // if rules exists add - if (defaults.rules) { - defaults.rules.forEach((rule) => { - config.module.rules.push(rule) - }) - } + config.plugins = defaults.plugins.concat([ + new RemoveEmptyScriptsPlugin(), + new MiniCssExtractPlugin({ + filename: 'css/[name].css', + }), + new PurgeCSSPlugin({ + paths: glob.sync(`${defaults.purge.src}/**/*`, { nodir: true }), + safelist: defaults.purge.safelist + }), + new ManifestPlugin({ + filename: 'assets-manifest.json', + context: defaults.destination + }) + ]) - // adding svg src - if (defaults.svg && defaults.svg.src) { - config.plugins.push(new SvgSpritemapPlugin(defaults.svg.src, { - output: { - filename: 'symbol-defs.svg', - chunk: { - keep: true - }, - svgo: { - plugins: [{ - name: 'convertStyleToAttrs', - active: true - },{ - name: 'removeStyleElement', - active: true - }, { - name: 'removeAttrs', - params: { - attrs: 'fill' - } - }] - } - }, - sprite: { - prefix: 'icon-' - } - })) - } + // if rules exists add + if (defaults.rules) { + defaults.rules.forEach((rule) => { + config.module.rules.push(rule) + }) + } - return config + // adding svg src + if (defaults.svg.src) { + config.plugins.push(new SvgSpritemapPlugin(defaults.svg.src, { + output: { + filename: 'symbol-defs.svg', + chunk: { + keep: true + }, + svgo: { + plugins: [{ + name: 'convertStyleToAttrs', + active: true + },{ + name: 'removeStyleElement', + active: true + }, { + name: 'removeAttrs', + params: { + attrs: 'fill' + } + }] + } + }, + sprite: { + prefix: 'icon-' + } + })) + } + + return config } diff --git a/package.json b/package.json index 9621e66..44805aa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tiny-components/webpack", - "version": "0.5.2", + "version": "0.6.0", "description": "Webpack Wrapper", "repository": { "type": "git",