diff --git a/build/paths.js b/build/paths.js deleted file mode 100644 index 64caaba..0000000 --- a/build/paths.js +++ /dev/null @@ -1,12 +0,0 @@ -const path = require('path') - -module.exports = { - SRC: path.resolve(__dirname, '..', 'src'), - DIST: path.resolve(__dirname, '..', 'dist'), - ASSETS: path.resolve(__dirname, '..', 'assets'), - IMAGES: path.resolve(__dirname, '..', 'src/images'), - STYLES: path.resolve(__dirname, '..', 'src/styles'), - LIB: path.resolve(__dirname, '..', 'lib'), - MASKS: path.resolve(__dirname, '..', 'src/masks'), - ROOT: path.resolve(__dirname, '..') -} \ No newline at end of file diff --git a/build/webpack.common.js b/build/webpack.common.js deleted file mode 100644 index fb03409..0000000 --- a/build/webpack.common.js +++ /dev/null @@ -1,97 +0,0 @@ -const path = require('path'); -const { SRC, DIST, LIB } = require('./paths'); -const webpack = require('webpack'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const SymlinkWebpackPlugin = require('symlink-webpack-plugin'); -const { VueLoaderPlugin } = require('vue-loader') - -module.exports = { - entry: { - app: path.resolve(SRC, 'scripts', 'app.js') - }, - output: { - path: DIST, - filename: '[name].js', - publicPath: '../dist/' - }, - module: { - rules: [{ - test: /\.vue$/, - loader: 'vue-loader' - }, { - test: /\.js$/, - exclude: file => (/node_modules/.test(file) && !/\.vue\.js/.test(file)), - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env'], - } - }, - }, { - test: /\.html$/i, - loader: "html-loader", - }, { - test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: 'asset/resource' - }, { - test: /\.s[ac]ss$/i, - use: [ - 'vue-style-loader', - 'css-loader', - 'resolve-url-loader', - { - loader: 'sass-loader', - options: { - implementation: require.resolve('sass'), - sourceMap: true - } - } - ] - }, { - test: /\.css$/i, - use: ["vue-style-loader", "css-loader"], - }, { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset', - parser: { - dataUrlCondition: { - maxSize: 1 * 1024 - } - }, - generator: { - filename: 'images/[name][ext]' - } - } - ] - }, - plugins: [ - new CopyWebpackPlugin({ - patterns: [{ - from: path.resolve(LIB, 'index.php'), - to: 'index.php' - }, - { from: 'src/images/logo_black.png', to: 'images' }, - { from: 'src/images/spot-logo-only.svg', to: 'images' } - ], - }), - new SymlinkWebpackPlugin([ - { origin: '../files/', symlink: 'files' }, - { origin: '../geo/', symlink: 'geo' }, - { origin: '../src/images/icons/', symlink: 'images/icons' } - ]), - new CleanWebpackPlugin(), - new webpack.DefinePlugin({ - __VUE_OPTIONS_API__: 'true', - __VUE_PROD_DEVTOOLS__: 'false', - __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false' - }), - new VueLoaderPlugin() - ], - resolve: { - extensions: ['.js', '.vue', '...'], - alias: { - "@scripts": path.resolve(SRC, "scripts") - } - } -}; diff --git a/build/webpack.config.js b/build/webpack.config.js new file mode 100644 index 0000000..aae4d37 --- /dev/null +++ b/build/webpack.config.js @@ -0,0 +1,102 @@ +const path = require('path'); +const webpack = require('webpack'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); +const SymlinkWebpackPlugin = require('symlink-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); + +const ROOT = path.resolve(__dirname, '..'); +const SRC = path.resolve(ROOT, 'src'); +const DIST = path.resolve(ROOT, 'dist'); +const LIB = path.resolve(ROOT, 'lib'); + +module.exports = (env, argv) => { + const mode = argv.mode || 'production'; + const isDev = (mode === 'development'); + + return { + mode, + devtool: isDev ? 'inline-source-map' : false, + watch: isDev, + entry: { + app: path.resolve(SRC, 'scripts', 'app.js') + }, + output: { + path: DIST, + filename: '[name].js', + publicPath: '../dist/' + }, + module: { + rules: [{ + test: /\.vue$/, + loader: 'vue-loader' + }, { + test: /\.js$/, + exclude: file => (/node_modules/.test(file) && !/\.vue\.js/.test(file)), + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'] + } + } + }, { + test: /\.html$/i, + loader: 'html-loader' + }, { + test: /\.s[ac]ss$/i, + use: [ + 'vue-style-loader', + 'css-loader', + { + loader: 'sass-loader', + options: { + implementation: require.resolve('sass'), + sourceMap: isDev + } + } + ] + }, { + test: /\.css$/i, + use: ['vue-style-loader', 'css-loader'] + }, { + test: /\.(png|svg|jpg|jpeg|gif)$/i, + type: 'asset', + parser: { + dataUrlCondition: { + maxSize: 1 * 1024 + } + }, + generator: { + filename: 'images/[name][ext]' + } + }] + }, + plugins: [ + new CopyWebpackPlugin({ + patterns: [ + { from: path.resolve(LIB, 'index.php'), to: 'index.php' }, + { from: path.resolve(SRC, 'images', 'logo_black.png'), to: 'images' }, + { from: path.resolve(SRC, 'images', 'spot-logo-only.svg'), to: 'images' } + ] + }), + new SymlinkWebpackPlugin([ + { origin: '../files/', symlink: 'files' }, + { origin: '../geo/', symlink: 'geo' }, + { origin: '../src/images/icons/', symlink: 'images/icons' } + ]), + new CleanWebpackPlugin(), + new webpack.DefinePlugin({ + __VUE_OPTIONS_API__: 'true', + __VUE_PROD_DEVTOOLS__: 'false', + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false' + }), + new VueLoaderPlugin() + ], + resolve: { + extensions: ['.js', '.vue', '...'], + alias: { + '@scripts': path.resolve(SRC, 'scripts') + } + } + }; +}; diff --git a/build/webpack.dev.js b/build/webpack.dev.js deleted file mode 100644 index 1643ccc..0000000 --- a/build/webpack.dev.js +++ /dev/null @@ -1,7 +0,0 @@ -const { merge } = require('webpack-merge') - -module.exports = merge(require('./webpack.common.js'), { - mode: 'development', - devtool: 'inline-source-map', - watch: true -}) diff --git a/build/webpack.prod.js b/build/webpack.prod.js deleted file mode 100644 index 870d3a0..0000000 --- a/build/webpack.prod.js +++ /dev/null @@ -1,5 +0,0 @@ -const { merge } = require('webpack-merge') - -module.exports = merge(require('./webpack.common.js'), { - mode: 'production' -}) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index bbe5a27..c57344f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,6 @@ "sass": "^1.97.2", "sass-loader": "^16.0.5", "simplebar-vue": "^2.3.3", - "url-loader": "^4.1.1", "vue": "^3.3.8", "vue-style-loader": "^4.1.3" }, @@ -30,7 +29,6 @@ "@babel/core": "^7.23.9", "@babel/preset-env": "^7.23.9", "babel-loader": "^10.0.0", - "resolve-url-loader": "^5.0.0", "symlink-webpack-plugin": "^1.1.0", "vue-loader": "^17.4.2", "webpack": "^5.99.7", @@ -2512,20 +2510,6 @@ "acorn": "^8.14.0" } }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, "node_modules/ajv": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", @@ -3254,12 +3238,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, "node_modules/fast-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", @@ -3760,6 +3738,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -3810,20 +3789,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3927,15 +3892,6 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "license": "MIT" }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mime-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz", @@ -3945,18 +3901,6 @@ "wildcard": "^1.1.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -4500,15 +4444,6 @@ "integrity": "sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==", "license": "MIT" }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/quickselect": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", @@ -4561,13 +4496,6 @@ "node": ">=4" } }, - "node_modules/regex-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", - "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", - "dev": true, - "license": "MIT" - }, "node_modules/regexpu-core": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", @@ -4678,30 +4606,6 @@ "protocol-buffers-schema": "^3.3.1" } }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -5174,91 +5078,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/url-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/url-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index dc32ba8..07979f7 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "@babel/core": "^7.23.9", "@babel/preset-env": "^7.23.9", "babel-loader": "^10.0.0", - "resolve-url-loader": "^5.0.0", "symlink-webpack-plugin": "^1.1.0", "vue-loader": "^17.4.2", "webpack": "^5.99.7", @@ -15,8 +14,8 @@ "main": "index.js", "private": true, "scripts": { - "dev": "webpack --config build/webpack.dev.js", - "prod": "webpack --config build/webpack.prod.js" + "dev": "webpack --config build/webpack.config.js --mode development", + "prod": "webpack --config build/webpack.config.js --mode production" }, "keywords": [], "author": "Franzz", @@ -35,7 +34,6 @@ "sass": "^1.97.2", "sass-loader": "^16.0.5", "simplebar-vue": "^2.3.3", - "url-loader": "^4.1.1", "vue": "^3.3.8", "vue-style-loader": "^4.1.3" }