Merge all configs into one

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
John Molakvoæ (skjnldsv) 2021-08-06 17:39:01 +02:00 committed by John Molakvoæ
parent fd25252deb
commit 7f20d59f9c
No known key found for this signature in database
GPG Key ID: 60C25B8C072916CF
6 changed files with 224 additions and 150 deletions

29
package-lock.json generated
View File

@ -88,6 +88,7 @@
"babel-loader-exclude-node-modules-except": "^1.2.1",
"css-loader": "^5.2.7",
"eslint-loader": "^4.0.2",
"eslint-webpack-plugin": "^2.5.4",
"exports-loader": "^1.1.1",
"file-loader": "^6.2.0",
"handlebars-loader": "^1.7.1",
@ -7661,7 +7662,6 @@
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz",
"integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==",
"dev": true,
"peer": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
@ -7671,8 +7671,7 @@
"version": "0.0.50",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
"integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
"dev": true,
"peer": true
"dev": true
},
"node_modules/@types/graceful-fs": {
"version": "4.1.5",
@ -8334,7 +8333,6 @@
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
"dev": true,
"peer": true,
"engines": {
"node": ">=8"
}
@ -11511,7 +11509,6 @@
"resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz",
"integrity": "sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw==",
"dev": true,
"peer": true,
"dependencies": {
"@types/eslint": "^7.2.6",
"arrify": "^2.0.1",
@ -11537,7 +11534,6 @@
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"peer": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@ -11550,7 +11546,6 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"peer": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@ -11563,7 +11558,6 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"peer": true,
"engines": {
"node": ">=0.12.0"
}
@ -11573,7 +11567,6 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
"dev": true,
"peer": true,
"dependencies": {
"braces": "^3.0.1",
"picomatch": "^2.2.3"
@ -11587,7 +11580,6 @@
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
"integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
"dev": true,
"peer": true,
"dependencies": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
@ -11606,7 +11598,6 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"peer": true,
"dependencies": {
"is-number": "^7.0.0"
},
@ -28800,7 +28791,6 @@
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz",
"integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==",
"dev": true,
"peer": true,
"requires": {
"@types/estree": "*",
"@types/json-schema": "*"
@ -28810,8 +28800,7 @@
"version": "0.0.50",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
"integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
"dev": true,
"peer": true
"dev": true
},
"@types/graceful-fs": {
"version": "4.1.5",
@ -29380,8 +29369,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
"dev": true,
"peer": true
"dev": true
},
"asn1.js": {
"version": "5.4.1",
@ -32154,7 +32142,6 @@
"resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz",
"integrity": "sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw==",
"dev": true,
"peer": true,
"requires": {
"@types/eslint": "^7.2.6",
"arrify": "^2.0.1",
@ -32169,7 +32156,6 @@
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"peer": true,
"requires": {
"fill-range": "^7.0.1"
}
@ -32179,7 +32165,6 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"peer": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@ -32188,15 +32173,13 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"peer": true
"dev": true
},
"micromatch": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
"dev": true,
"peer": true,
"requires": {
"braces": "^3.0.1",
"picomatch": "^2.2.3"
@ -32207,7 +32190,6 @@
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
"integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
"dev": true,
"peer": true,
"requires": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
@ -32219,7 +32201,6 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"peer": true,
"requires": {
"is-number": "^7.0.0"
}

View File

@ -104,6 +104,7 @@
"babel-loader-exclude-node-modules-except": "^1.2.1",
"css-loader": "^5.2.7",
"eslint-loader": "^4.0.2",
"eslint-webpack-plugin": "^2.5.4",
"exports-loader": "^1.1.1",
"file-loader": "^6.2.0",
"handlebars-loader": "^1.7.1",

View File

@ -1,48 +1,11 @@
/* eslint-disable camelcase */
const { merge } = require('webpack-merge')
const { VueLoaderPlugin } = require('vue-loader')
const path = require('path')
const BabelLoaderExcludeNodeModulesExcept = require('babel-loader-exclude-node-modules-except')
const ESLintPlugin = require('eslint-webpack-plugin')
const accessibility = require('./apps/accessibility/webpack')
const comments = require('./apps/comments/webpack')
const core = require('./core/webpack')
const dashboard = require('./apps/dashboard/webpack')
const dav = require('./apps/dav/webpack')
const files = require('./apps/files/webpack')
const files_sharing = require('./apps/files_sharing/webpack')
const files_trashbin = require('./apps/files_trashbin/webpack')
const files_versions = require('./apps/files_versions/webpack')
const oauth2 = require('./apps/oauth2/webpack')
const settings = require('./apps/settings/webpack')
const systemtags = require('./apps/systemtags/webpack')
const user_status = require('./apps/user_status/webpack')
const weather_status = require('./apps/weather_status/webpack')
const twofactor_backupscodes = require('./apps/twofactor_backupcodes/webpack')
const updatenotification = require('./apps/updatenotification/webpack')
const workflowengine = require('./apps/workflowengine/webpack')
const modules = {
accessibility,
comments,
core,
dashboard,
dav,
files,
files_sharing,
files_trashbin,
files_versions,
oauth2,
settings,
systemtags,
user_status,
weather_status,
twofactor_backupscodes,
updatenotification,
workflowengine,
}
const modules = require('./webpack.modules.js')
const modulesToBuild = () => {
const MODULE = process.env.MODULE
@ -50,84 +13,115 @@ const modulesToBuild = () => {
if (!modules[MODULE]) {
throw new Error(`No module "${MODULE}" found`)
}
return [modules[MODULE]]
return modules[MODULE]
}
return Object.values(modules)
// merge all configs into one object
return Object.assign({}, ...Object.values(modules))
}
module.exports = []
.concat(
...modulesToBuild()
)
.map(config => merge({
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
},
{
test: /\.vue$/,
loader: 'vue-loader',
exclude: BabelLoaderExcludeNodeModulesExcept([
'vue-material-design-icons',
]),
},
{
test: /\.js$/,
loader: 'babel-loader',
// automatically detect necessary packages to
// transpile in the node_modules folder
exclude: BabelLoaderExcludeNodeModulesExcept([
'@nextcloud/dialogs',
'@nextcloud/event-bus',
'@nextcloud/vue-dashboard',
'davclient.js',
'nextcloud-vue-collections',
'p-finally',
'p-limit',
'p-locate',
'p-queue',
'p-timeout',
'p-try',
'semver',
'striptags',
'toastify-js',
'v-tooltip',
'yocto-queue',
]),
},
{
test: /\.(png|jpg|gif)$/,
loader: 'url-loader',
options: {
name: '[name].[ext]?[hash]',
limit: 8192,
},
},
{
test: /\.handlebars/,
loader: 'handlebars-loader',
query: {
extensions: '.handlebars',
},
},
module.exports = {
entry: modulesToBuild(),
output: {
// Step away from the src folder and extract to the js folder
path: path.join(__dirname),
publicPath: '/dist/',
filename: (chunkData) => {
// Get relative path of the src folder
const srcPath = chunkData.chunk.entryModule.context
const relativePath = path.relative(__dirname, srcPath)
],
// If this is a core source, output in core dist folder
if (relativePath.indexOf('core/src') > -1) {
return path.join('core/js/dist/', '[name].js?v=[contenthash]')
}
// Get out of the shared dist folder and output inside apps js folder
return path.join(relativePath, '..', 'js') + '/[name].js?v=[contenthash]'
},
plugins: [new VueLoaderPlugin(), new ESLintPlugin()],
resolve: {
alias: {
OC: path.resolve(__dirname, './core/src/OC'),
OCA: path.resolve(__dirname, './core/src/OCA'),
// make sure to use the handlebar runtime when importing
handlebars: 'handlebars/runtime',
chunkFilename: 'dist/[name]-[id].js?v=[contenthash]',
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
},
{
test: /\.vue$/,
loader: 'vue-loader',
exclude: BabelLoaderExcludeNodeModulesExcept([
'vue-material-design-icons',
]),
},
{
test: /\.js$/,
loader: 'babel-loader',
// automatically detect necessary packages to
// transpile in the node_modules folder
exclude: BabelLoaderExcludeNodeModulesExcept([
'@nextcloud/dialogs',
'@nextcloud/event-bus',
'@nextcloud/vue-dashboard',
'davclient.js',
'nextcloud-vue-collections',
'p-finally',
'p-limit',
'p-locate',
'p-queue',
'p-timeout',
'p-try',
'semver',
'striptags',
'toastify-js',
'v-tooltip',
'yocto-queue',
]),
},
{
test: /\.(png|jpe?g|gif|svg|woff2?|eot|ttf)$/,
loader: 'url-loader',
options: {
name: '[name].[ext]?[hash]',
},
},
{
test: /\.handlebars/,
loader: 'handlebars-loader',
query: {
extensions: '.handlebars',
},
},
],
},
optimization: {
splitChunks: {
automaticNameDelimiter: '-',
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
enforce: true,
name: 'nextcloud',
chunks: 'all',
},
},
extensions: ['*', '.js', '.vue'],
symlinks: false,
},
}, config))
},
plugins: [new VueLoaderPlugin(), new ESLintPlugin()],
resolve: {
alias: {
OC: path.resolve(__dirname, './core/src/OC'),
OCA: path.resolve(__dirname, './core/src/OCA'),
// make sure to use the handlebar runtime when importing
handlebars: 'handlebars/runtime',
},
extensions: ['*', '.js', '.vue'],
symlinks: false,
},
}

View File

@ -1,9 +1,7 @@
const { merge } = require('webpack-merge')
const common = require('./webpack.common.js')
const config = require('./webpack.common.js')
module.exports = common.map(
config => merge(config, {
mode: 'development',
devtool: 'cheap-source-map',
})
)
module.exports = merge(config, {
mode: 'development',
devtool: 'cheap-source-map',
})

102
webpack.modules.js Normal file
View File

@ -0,0 +1,102 @@
/**
* @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
const path = require('path')
module.exports = {
accessibility: {
accessibility: path.join(__dirname, 'apps/accessibility/src', 'main.js'),
accessibilityoca: path.join(__dirname, 'apps/accessibility/src', 'accessibilityoca.js'),
},
comments: {
comments: path.join(__dirname, 'apps/comments/src', 'comments.js'),
'comments-app': path.join(__dirname, 'apps/comments/src', 'comments-app.js'),
'comments-tab': path.join(__dirname, 'apps/comments/src', 'comments-tab.js'),
},
core: {
files_client: path.join(__dirname, 'core/src', 'files/client.js'),
files_fileinfo: path.join(__dirname, 'core/src', 'files/fileinfo.js'),
files_iedavclient: path.join(__dirname, 'core/src', 'files/iedavclient.js'),
install: path.join(__dirname, 'core/src', 'install.js'),
login: path.join(__dirname, 'core/src', 'login.js'),
main: path.join(__dirname, 'core/src', 'main.js'),
maintenance: path.join(__dirname, 'core/src', 'maintenance.js'),
recommendedapps: path.join(__dirname, 'core/src', 'recommendedapps.js'),
'unified-search': path.join(__dirname, 'core/src', 'unified-search.js'),
systemtags: path.resolve(__dirname, 'core/src', 'systemtags/merged-systemtags.js'),
},
dashboard: {
'dashboard-main': path.join(__dirname, 'apps/dashboard/src', 'main.js'),
},
dav: {
'settings-admin-caldav': path.join(__dirname, 'apps/dav/src', 'settings.js'),
},
files: {
sidebar: path.join(__dirname, 'apps/files/src', 'sidebar.js'),
templates: path.join(__dirname, 'apps/files/src', 'templates.js'),
'files-app-settings': path.join(__dirname, 'apps/files/src', 'files-app-settings.js'),
'personal-settings': path.join(__dirname, 'apps/files/src', 'main-personal-settings.js'),
},
files_sharing: {
additionalScripts: path.join(__dirname, 'apps/files_sharing/src', 'additionalScripts.js'),
collaboration: path.join(__dirname, 'apps/files_sharing/src', 'collaborationresourceshandler.js'),
files_sharing_tab: path.join(__dirname, 'apps/files_sharing/src', 'files_sharing_tab.js'),
files_sharing: path.join(__dirname, 'apps/files_sharing/src', 'files_sharing.js'),
main: path.join(__dirname, 'apps/files_sharing/src', 'index.js'),
'personal-settings': path.join(__dirname, 'apps/files_sharing/src', 'personal-settings.js'),
},
files_trashbin: {
files_trashbin: path.join(__dirname, 'apps/files_trashbin/src', 'files_trashbin.js'),
},
files_versions: {
files_versions: path.join(__dirname, 'apps/files_versions/src', 'files_versions.js'),
},
oauth2: {
oauth2: path.join(__dirname, 'apps/oauth2/src', 'main.js'),
},
settings: {
'settings-apps-users-management': path.join(__dirname, 'apps/settings/src', 'main-apps-users-management.js'),
'settings-admin-security': path.join(__dirname, 'apps/settings/src', 'main-admin-security.js'),
'settings-personal-security': path.join(__dirname, 'apps/settings/src', 'main-personal-security.js'),
'settings-personal-webauthn': path.join(__dirname, 'apps/settings/src', 'main-personal-webauth.js'),
'settings-nextcloud-pdf': path.join(__dirname, 'apps/settings/src', 'main-nextcloud-pdf.js'),
'settings-personal-info': path.join(__dirname, 'apps/settings/src', 'main-personal-info.js'),
},
systemtags: {
systemtags: path.join(__dirname, 'apps/systemtags/src', 'systemtags.js'),
},
user_status: {
'user_status-dashboard': path.join(__dirname, 'apps/user_status/src', 'dashboard.js'),
'user_status-menu': path.join(__dirname, 'apps/user_status/src', 'main-user-status-menu.js'),
},
weather_status: {
'weather-status': path.join(__dirname, 'apps/weather_status/src', 'weather-status.js'),
},
twofactor_backupscodes: {
settings: path.join(__dirname, 'apps/twofactor_backupcodes/src', 'settings.js'),
},
updatenotification: {
updatenotification: path.join(__dirname, 'apps/updatenotification/src', 'init.js'),
},
workflowengine: {
workflowengine: path.join(__dirname, 'apps/workflowengine/src', 'workflowengine.js'),
},
}

View File

@ -1,9 +1,7 @@
const { merge } = require('webpack-merge')
const common = require('./webpack.common.js')
const config = require('./webpack.common.js')
module.exports = common.map(
config => merge(config, {
mode: 'production',
devtool: 'source-map',
})
)
module.exports = merge(config, {
mode: 'production',
devtool: 'source-map',
})