Merge pull request #4720 from nextcloud/backport/4688/stable27
This commit is contained in:
@@ -60,6 +60,14 @@ To build you will need to have [Node.js](https://nodejs.org/en/) and [Composer](
|
|||||||
- Watch for changes `npm run watch`
|
- Watch for changes `npm run watch`
|
||||||
- Production build `npm run build`
|
- Production build `npm run build`
|
||||||
|
|
||||||
|
### Faster frontend developing with HMR
|
||||||
|
|
||||||
|
You can enable HMR (Hot module replacement) to avoid page reloads when working on the frontend:
|
||||||
|
|
||||||
|
1. ☑️ Install and enable [`hmr_enabler` app](https://github.com/nextcloud/hmr_enabler)
|
||||||
|
2. 🏁 Run `npm run serve`
|
||||||
|
3. 🌍 Open the normal Nextcloud server URL (not the URL given by above command)
|
||||||
|
|
||||||
### GitHub Codespaces / VS Code devcontainer
|
### GitHub Codespaces / VS Code devcontainer
|
||||||
|
|
||||||
- Open code spaces or the repository in VS Code to start the dev container
|
- Open code spaces or the repository in VS Code to start the dev container
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
"build": "NODE_ENV=production webpack --progress --config webpack.js",
|
"build": "NODE_ENV=production webpack --progress --config webpack.js",
|
||||||
"dev": "NODE_ENV=development webpack --progress --config webpack.js",
|
"dev": "NODE_ENV=development webpack --progress --config webpack.js",
|
||||||
"watch": "NODE_ENV=development webpack --progress --watch --config webpack.js",
|
"watch": "NODE_ENV=development webpack --progress --watch --config webpack.js",
|
||||||
|
"serve": "webpack serve --node-env development --allowed-hosts all --config webpack.js",
|
||||||
"lint": "eslint --ext .js,.vue src",
|
"lint": "eslint --ext .js,.vue src",
|
||||||
"lint:fix": "eslint --ext .js,.vue src --fix",
|
"lint:fix": "eslint --ext .js,.vue src --fix",
|
||||||
"lint:cypress": "eslint --ext .js cypress",
|
"lint:cypress": "eslint --ext .js cypress",
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
import { subscribe } from '@nextcloud/event-bus'
|
import { subscribe } from '@nextcloud/event-bus'
|
||||||
import { generateUrl } from '@nextcloud/router'
|
import { generateUrl } from '@nextcloud/router'
|
||||||
|
|
||||||
|
import './shared-init.js'
|
||||||
|
|
||||||
subscribe('calendar:handle-todo-click', ({ calendarId, taskId }) => {
|
subscribe('calendar:handle-todo-click', ({ calendarId, taskId }) => {
|
||||||
const deckAppPrefix = 'app-generated--deck--board-'
|
const deckAppPrefix = 'app-generated--deck--board-'
|
||||||
if (calendarId.startsWith(deckAppPrefix)) {
|
if (calendarId.startsWith(deckAppPrefix)) {
|
||||||
|
|||||||
@@ -26,10 +26,7 @@ import './../css/collections.css'
|
|||||||
import FileSharingPicker from './views/FileSharingPicker.js'
|
import FileSharingPicker from './views/FileSharingPicker.js'
|
||||||
import { buildSelector } from './helpers/selector.js'
|
import { buildSelector } from './helpers/selector.js'
|
||||||
|
|
||||||
// eslint-disable-next-line
|
import './shared-init.js'
|
||||||
__webpack_nonce__ = btoa(OC.requestToken);
|
|
||||||
// eslint-disable-next-line
|
|
||||||
__webpack_public_path__ = OC.linkTo('deck', 'js/');
|
|
||||||
|
|
||||||
Vue.prototype.t = t
|
Vue.prototype.t = t
|
||||||
Vue.prototype.n = n
|
Vue.prototype.n = n
|
||||||
|
|||||||
@@ -22,12 +22,9 @@
|
|||||||
|
|
||||||
import './css/dashboard.scss'
|
import './css/dashboard.scss'
|
||||||
|
|
||||||
const debug = process.env.NODE_ENV !== 'production'
|
import './shared-init.js'
|
||||||
|
|
||||||
// eslint-disable-next-line
|
const debug = process.env.NODE_ENV !== 'production'
|
||||||
__webpack_nonce__ = btoa(OC.requestToken);
|
|
||||||
// eslint-disable-next-line
|
|
||||||
__webpack_public_path__ = OC.linkTo('deck', 'js/');
|
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
OCA.Dashboard.register('deck', async (el) => {
|
OCA.Dashboard.register('deck', async (el) => {
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ import CommentReferenceWidget from './views/CommentReferenceWidget.vue'
|
|||||||
|
|
||||||
import { translate, translatePlural } from '@nextcloud/l10n'
|
import { translate, translatePlural } from '@nextcloud/l10n'
|
||||||
|
|
||||||
|
import './shared-init.js'
|
||||||
|
|
||||||
Vue.prototype.t = translate
|
Vue.prototype.t = translate
|
||||||
Vue.prototype.n = translatePlural
|
Vue.prototype.n = translatePlural
|
||||||
Vue.prototype.OC = window.OC
|
Vue.prototype.OC = window.OC
|
||||||
|
|||||||
@@ -27,10 +27,7 @@ import CardCreateDialog from './CardCreateDialog.vue'
|
|||||||
import { buildSelector } from './helpers/selector.js'
|
import { buildSelector } from './helpers/selector.js'
|
||||||
import './init-collections.js'
|
import './init-collections.js'
|
||||||
|
|
||||||
// eslint-disable-next-line
|
import './shared-init.js'
|
||||||
__webpack_nonce__ = btoa(OC.requestToken);
|
|
||||||
// eslint-disable-next-line
|
|
||||||
__webpack_public_path__ = OC.linkTo('deck', 'js/');
|
|
||||||
|
|
||||||
Vue.prototype.t = t
|
Vue.prototype.t = t
|
||||||
Vue.prototype.n = n
|
Vue.prototype.n = n
|
||||||
|
|||||||
@@ -25,23 +25,17 @@ import router from './router.js'
|
|||||||
import store from './store/main.js'
|
import store from './store/main.js'
|
||||||
import { sync } from 'vuex-router-sync'
|
import { sync } from 'vuex-router-sync'
|
||||||
import { translate, translatePlural } from '@nextcloud/l10n'
|
import { translate, translatePlural } from '@nextcloud/l10n'
|
||||||
import { generateFilePath } from '@nextcloud/router'
|
|
||||||
import { showError } from '@nextcloud/dialogs'
|
import { showError } from '@nextcloud/dialogs'
|
||||||
import { subscribe } from '@nextcloud/event-bus'
|
import { subscribe } from '@nextcloud/event-bus'
|
||||||
import { Tooltip } from '@nextcloud/vue'
|
import { Tooltip } from '@nextcloud/vue'
|
||||||
import ClickOutside from 'vue-click-outside'
|
import ClickOutside from 'vue-click-outside'
|
||||||
|
import './shared-init.js'
|
||||||
import './models/index.js'
|
import './models/index.js'
|
||||||
import './sessions.js'
|
import './sessions.js'
|
||||||
|
|
||||||
// the server snap.js conflicts with vertical scrolling so we disable it
|
// the server snap.js conflicts with vertical scrolling so we disable it
|
||||||
document.body.setAttribute('data-snap-ignore', 'true')
|
document.body.setAttribute('data-snap-ignore', 'true')
|
||||||
|
|
||||||
// eslint-disable-next-line
|
|
||||||
__webpack_nonce__ = btoa(OC.requestToken)
|
|
||||||
if (!process.env.HOT) {
|
|
||||||
// eslint-disable-next-line
|
|
||||||
__webpack_public_path__ = generateFilePath('deck', '', 'js/')
|
|
||||||
}
|
|
||||||
sync(store, router)
|
sync(store, router)
|
||||||
|
|
||||||
Vue.prototype.t = translate
|
Vue.prototype.t = translate
|
||||||
|
|||||||
12
src/shared-init.js
Normal file
12
src/shared-init.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { generateFilePath } from '@nextcloud/router'
|
||||||
|
|
||||||
|
// eslint-disable-next-line
|
||||||
|
__webpack_nonce__ = btoa(OC.requestToken)
|
||||||
|
|
||||||
|
if (!process.env.WEBPACK_SERVE) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
__webpack_public_path__ = generateFilePath('deck', '', 'js/')
|
||||||
|
} else {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
__webpack_public_path__ = 'http://127.0.0.1:3000/'
|
||||||
|
}
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
const webpack = require('webpack');
|
|
||||||
const merge = require('webpack-merge');
|
|
||||||
const dev = require('./webpack.dev.js');
|
|
||||||
|
|
||||||
module.exports = merge(dev, {
|
|
||||||
devServer: {
|
|
||||||
hot: true,
|
|
||||||
port: 3000,
|
|
||||||
/**
|
|
||||||
* This makes sure the main entrypoint is written to disk so it is
|
|
||||||
* loaded by Nextcloud though our existing addScript calls
|
|
||||||
*/
|
|
||||||
writeToDisk: (filePath) => {
|
|
||||||
return /deck\.js$/.test(filePath);
|
|
||||||
},
|
|
||||||
headers: {
|
|
||||||
'Access-Control-Allow-Origin': '*'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
new webpack.DefinePlugin({
|
|
||||||
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
|
|
||||||
'process.env.HOT': true
|
|
||||||
})
|
|
||||||
]
|
|
||||||
})
|
|
||||||
13
webpack.js
13
webpack.js
@@ -1,8 +1,9 @@
|
|||||||
const webpackConfig = require('@nextcloud/webpack-vue-config')
|
const webpackConfig = require('@nextcloud/webpack-vue-config')
|
||||||
|
const webpack = require('webpack')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
|
||||||
const buildMode = process.env.NODE_ENV
|
const buildMode = process.env.NODE_ENV
|
||||||
const isDev = buildMode === 'development'
|
const isDevServer = process.env.WEBPACK_SERVE
|
||||||
|
|
||||||
webpackConfig.entry = {
|
webpackConfig.entry = {
|
||||||
...webpackConfig.entry,
|
...webpackConfig.entry,
|
||||||
@@ -13,6 +14,14 @@ webpackConfig.entry = {
|
|||||||
reference: path.join(__dirname, 'src', 'init-reference.js'),
|
reference: path.join(__dirname, 'src', 'init-reference.js'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isDevServer) {
|
||||||
|
webpackConfig.output.publicPath = 'http://127.0.0.1:3000/'
|
||||||
|
webpackConfig.plugins.push(
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env.WEBPACK_SERVE': true,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
} else {
|
||||||
webpackConfig.stats = {
|
webpackConfig.stats = {
|
||||||
context: path.resolve(__dirname, 'src'),
|
context: path.resolve(__dirname, 'src'),
|
||||||
assets: true,
|
assets: true,
|
||||||
@@ -20,7 +29,7 @@ webpackConfig.stats = {
|
|||||||
chunks: true,
|
chunks: true,
|
||||||
modules: true,
|
modules: true,
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Workaround for https://github.com/nextcloud/webpack-vue-config/pull/432 causing problems with nextcloud-vue-collections
|
// Workaround for https://github.com/nextcloud/webpack-vue-config/pull/432 causing problems with nextcloud-vue-collections
|
||||||
webpackConfig.resolve.alias = {}
|
webpackConfig.resolve.alias = {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user