diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | package-lock.json | 66 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | src/EditorFactory.js | 2 | ||||
-rw-r--r-- | src/components/EditorWrapper.vue | 12 | ||||
-rw-r--r-- | src/components/FilesEditor.vue | 2 | ||||
-rw-r--r-- | src/components/PublicFilesEditor.vue | 2 | ||||
-rw-r--r-- | src/helpers/files.js | 2 | ||||
-rw-r--r-- | src/main.js | 4 | ||||
-rw-r--r-- | src/public.js | 4 | ||||
-rw-r--r-- | webpack.common.js | 20 |
11 files changed, 96 insertions, 21 deletions
diff --git a/.gitignore b/.gitignore index 1b743be2a..08a3321e1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -js/ build/ \.idea/ node_modules/ diff --git a/package-lock.json b/package-lock.json index 5917e8658..d78343d33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1482,6 +1482,12 @@ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.2.2.tgz", "integrity": "sha512-5VHykhxgUat7dvRWGw52Tk55SWjuZDpDO7PKDhfcLTFrD1cjbTtFFnWeJc0BfoqB2AUjfHXRoMdnqbFRGmnPVQ==" }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "dev": true + }, "@types/babel__core": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", @@ -1608,6 +1614,29 @@ "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", "dev": true }, + "@types/tapable": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.4.tgz", + "integrity": "sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.4.tgz", + "integrity": "sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", @@ -1635,6 +1664,27 @@ "@types/unist": "*" } }, + "@types/webpack": { + "version": "4.4.35", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.4.35.tgz", + "integrity": "sha512-kf+mn/+CB4HsFb+Rz0QBRlo8nNC9LFhwqeK5xxhd3FEPRWJv6MFVnljKV5ARac56+syO8vIhq+nGt860+3wx7A==", + "dev": true, + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "@types/yargs": { "version": "12.0.12", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", @@ -3332,6 +3382,16 @@ } } }, + "clean-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "dev": true, + "requires": { + "@types/webpack": "^4.4.31", + "del": "^4.1.1" + } + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -10363,9 +10423,9 @@ "integrity": "sha512-EcIqhBtS679fZ0jgl20mkGEV5z5OxJiN7QNb+G/UIVST48bnCYDk0Ds5G5vVdi6cpn3dIXAGWgvyvz8jP2aRqg==" }, "prosemirror-view": { - "version": "1.9.10", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.9.10.tgz", - "integrity": "sha512-jdRLg19sdcxgKUEaH61LjzIy6MUSQmDsU2OnNGvjSbl5UgZNMg+fWkjGqWDd+llGdh1DLaM0ItBHfHd9OeZA+Q==", + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.9.12.tgz", + "integrity": "sha512-og0JxRtce/hsg+61aPgCasfQtkqWYKuWmunU8H4+194AUpaYWg4ZmLNY9qWjfN7XKXoEtV4vPOUJ5RrYVijGjw==", "requires": { "prosemirror-model": "^1.1.0", "prosemirror-state": "^1.0.0", diff --git a/package.json b/package.json index e742d544c..0d5ae9e9f 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "nextcloud-server": "^0.15.10", "nextcloud-vue": "^0.11.5", "prosemirror-markdown": "^1.3.1", + "prosemirror-view": "^1.9.12", "tiptap": "^1.23.2", "tiptap-extensions": "^1.24.2", "v-tooltip": "^2.0.2", @@ -53,6 +54,7 @@ "babel-jest": "^24.8.0", "babel-loader": "^8.0.6", "browserslist-config-nextcloud": "0.0.1", + "clean-webpack-plugin": "^3.0.0", "css-loader": "^3.0.0", "eslint": "^5.16.0", "eslint-config-standard": "^12.0.0", diff --git a/src/EditorFactory.js b/src/EditorFactory.js index 32fbf12be..901c4d3db 100644 --- a/src/EditorFactory.js +++ b/src/EditorFactory.js @@ -45,7 +45,7 @@ const loadSyntaxHighlight = async(language) => { let modules = {} for (let i = 0; i < languages.length; i++) { try { - const lang = await import('highlight.js/lib/languages/' + languages[i]) + const lang = await import(/* webpackChunkName: "highlight/[request]" */'highlight.js/lib/languages/' + languages[i]) modules[languages[i]] = lang.default } catch (e) { // No matching highlighing found, fallback to none diff --git a/src/components/EditorWrapper.vue b/src/components/EditorWrapper.vue index f9edfa48b..3a80a4167 100644 --- a/src/components/EditorWrapper.vue +++ b/src/components/EditorWrapper.vue @@ -72,12 +72,12 @@ export default { name: 'EditorWrapper', components: { EditorContent, - MenuBar: () => import('./MenuBar'), - MenuBubble: () => import('./MenuBubble'), - ReadOnlyEditor: () => import('./ReadOnlyEditor'), - CollisionResolveDialog: () => import('./CollisionResolveDialog'), - GuestNameDialog: () => import('./GuestNameDialog'), - SessionList: () => import('./SessionList') + MenuBar: () => import(/* webpackChunkName: "editor-rich" */'./MenuBar'), + MenuBubble: () => import(/* webpackChunkName: "editor-rich" */'./MenuBubble'), + ReadOnlyEditor: () => import(/* webpackChunkName: "editor" */'./ReadOnlyEditor'), + CollisionResolveDialog: () => import(/* webpackChunkName: "editor" */'./CollisionResolveDialog'), + GuestNameDialog: () => import(/* webpackChunkName: "editor-guest" */'./GuestNameDialog'), + SessionList: () => import(/* webpackChunkName: "editor-collab" */'./SessionList') }, directives: { Tooltip diff --git a/src/components/FilesEditor.vue b/src/components/FilesEditor.vue index a21893a90..f951fa7d5 100644 --- a/src/components/FilesEditor.vue +++ b/src/components/FilesEditor.vue @@ -29,7 +29,7 @@ export default { name: 'FilesEditor', components: { - EditorWrapper: () => import('./EditorWrapper') + EditorWrapper: () => import(/* webpackChunkName: "editor" */'./EditorWrapper') }, props: { davPath: { diff --git a/src/components/PublicFilesEditor.vue b/src/components/PublicFilesEditor.vue index 6e8cb3b73..b50b937bb 100644 --- a/src/components/PublicFilesEditor.vue +++ b/src/components/PublicFilesEditor.vue @@ -34,7 +34,7 @@ export default { name: 'FilesEditor', components: { Modal, - EditorWrapper: () => import('./EditorWrapper') + EditorWrapper: () => import(/* webpackChunkName: "editor" */'./EditorWrapper') }, props: { fileId: { diff --git a/src/helpers/files.js b/src/helpers/files.js index 40bf6f81c..5358e3483 100644 --- a/src/helpers/files.js +++ b/src/helpers/files.js @@ -121,7 +121,7 @@ const registerFileActionFallback = () => { const file = window.FileList.findFile(filename) Promise.all([ import('vue'), - import('./../components/PublicFilesEditor') + import(/* webpackChunkName: "files-modal" */'./../components/PublicFilesEditor') ]).then((imports) => { const path = window.FileList.getCurrentDirectory() + '/' + filename const Vue = imports[0].default diff --git a/src/main.js b/src/main.js index 2f8690185..552d79e41 100644 --- a/src/main.js +++ b/src/main.js @@ -5,8 +5,8 @@ __webpack_public_path__ = OC.linkTo('text', 'js/') // eslint-disable-line if (document.getElementById('maineditor')) { Promise.all([ - import('vue'), - import('./components/EditorWrapper') + import(/* webpackChunkName: "editor" */'vue'), + import(/* webpackChunkName: "editor" */'./components/EditorWrapper') ]).then((imports) => { const Vue = imports[0].default Vue.prototype.t = window.t diff --git a/src/public.js b/src/public.js index 54a491c3a..32e842725 100644 --- a/src/public.js +++ b/src/public.js @@ -22,8 +22,8 @@ documentReady(() => { if (openMimetypes.indexOf(mimetype) !== -1) { Promise.all([ - import('vue'), - import('./components/EditorWrapper') + import(/* webpackChunkName: "vendor" */'vue'), + import(/* webpackChunkName: "editor" */'./components/EditorWrapper') ]).then((imports) => { const Vue = imports[0].default Vue.prototype.t = window.t diff --git a/webpack.common.js b/webpack.common.js index 3cd4f2b13..9dab63656 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -1,7 +1,7 @@ const path = require('path'); const VueLoaderPlugin = require('vue-loader/lib/plugin'); const StyleLintPlugin = require('stylelint-webpack-plugin'); - +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); module.exports = { entry: { @@ -13,7 +13,7 @@ module.exports = { path: path.resolve(__dirname, './js'), publicPath: '/js/', filename: '[name].js', - chunkFilename: '[name].[chunkhash].js' + chunkFilename: '[name].js?v=[contenthash]' }, module: { rules: [ @@ -57,12 +57,26 @@ module.exports = { new VueLoaderPlugin(), new StyleLintPlugin({ files: ['src/**/*.vue', 'src/**/*.scss', 'src/**/*.css'] - }) + }), + new CleanWebpackPlugin() ], resolve: { alias: { vue$: 'vue/dist/vue.esm.js' }, extensions: ['*', '.js', '.vue', '.json'] + }, + optimization: { + splitChunks: { + cacheGroups: { + highlight: { + test: /[\\/]node_modules[\\/](hightlight\.js)[\\/]/, + }, + vendors: { + test: /[\\/]node_modules[\\/]/, + reuseExistingChunk: true + } + } + } } }; |