diff --git a/package.json b/package.json index 4186244..f8de1ae 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kirbyup", "version": "1.3.2", - "packageManager": "pnpm@7.6.0", + "packageManager": "pnpm@7.8.0", "description": "Zero-config bundler for Kirby Panel plugins", "author": { "name": "Johann Schopplich", @@ -60,6 +60,7 @@ "cac": "^6.7.12", "chokidar": "^3.5.3", "consola": "^2.15.3", + "detect-package-manager": "^2.0.1", "magic-string": "^0.26.2", "pathe": "^0.3.3", "perfect-debounce": "^0.1.3", @@ -71,6 +72,7 @@ "sass": "^1.54.1", "unconfig": "^0.3.5", "vite": "^3.0.4", + "vite-plugin-live-reload": "^3.0.0", "vue": "^2.7.8" }, "devDependencies": { @@ -80,7 +82,6 @@ "@types/prompts": "^2.4.0", "@vitejs/plugin-vue2": "^1.1.2", "bumpp": "^8.2.1", - "detect-package-manager": "^2.0.1", "eslint": "^8.21.0", "fast-glob": "^3.2.11", "fs-extra": "^10.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 614e64e..bea4fb0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,6 +34,7 @@ specifiers: unbuild: ^0.7.6 unconfig: ^0.3.5 vite: ^3.0.4 + vite-plugin-live-reload: ^3.0.0 vitest: ^0.20.3 vue: ^2.7.8 @@ -42,6 +43,7 @@ dependencies: cac: 6.7.12 chokidar: 3.5.3 consola: 2.15.3 + detect-package-manager: 2.0.1 magic-string: 0.26.2 pathe: 0.3.3 perfect-debounce: 0.1.3 @@ -53,6 +55,7 @@ dependencies: sass: 1.54.1 unconfig: 0.3.5 vite: 3.0.4_sass@1.54.1 + vite-plugin-live-reload: 3.0.0 vue: 2.7.8 devDependencies: @@ -62,7 +65,6 @@ devDependencies: '@types/prompts': 2.4.0 '@vitejs/plugin-vue2': 1.1.2_2g7n65ohfqr2skd3fbvxhuubee_vite@3.0.4+vue@2.7.8 bumpp: 8.2.1 - detect-package-manager: 2.0.1 eslint: 8.21.0 fast-glob: 3.2.11 fs-extra: 10.1.0 @@ -1063,7 +1065,6 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true /cssesc/3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -1139,7 +1140,7 @@ packages: engines: {node: '>=12'} dependencies: execa: 5.1.1 - dev: true + dev: false /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -1855,7 +1856,7 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true + dev: false /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1995,7 +1996,7 @@ packages: /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: true + dev: false /get-symbol-description/1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} @@ -2119,7 +2120,7 @@ packages: /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: true + dev: false /ignore/5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} @@ -2287,7 +2288,7 @@ packages: /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true + dev: false /is-string/1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -2311,7 +2312,6 @@ packages: /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /jiti/1.14.0: resolution: {integrity: sha512-4IwstlaKQc9vCTC+qUXLM1hajy2ImiL9KnLvVYiaHOtS/v3wRjhLlGl121AmgDgx/O43uKmxownJghS5XMya2A==} @@ -2506,7 +2506,7 @@ packages: /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + dev: false /merge2/1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -2533,7 +2533,7 @@ packages: /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true + dev: false /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -2630,7 +2630,7 @@ packages: engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: true + dev: false /nth-check/2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -2707,7 +2707,7 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true + dev: false /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} @@ -2819,7 +2819,6 @@ packages: /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -3123,12 +3122,10 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex/3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -3140,7 +3137,7 @@ packages: /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + dev: false /simple-git-hooks/2.8.0: resolution: {integrity: sha512-ocmZQORwa6x9mxg+gVIAp5o4wXiWOHGXyrDBA0+UxGKIEKOyFtL4LWNKkP/2ornQPdlnlDGDteVeYP5FjhIoWA==} @@ -3239,7 +3236,7 @@ packages: /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true + dev: false /strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -3456,6 +3453,13 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /vite-plugin-live-reload/3.0.0: + resolution: {integrity: sha512-1ucmNc/UxiKvzudcVzgs+bTM3FHOLcso6U7kto2ujQsBoQolxAV7mMbqWtQ5jetm0hRiOvMada7QsP+IIK7+7w==} + dependencies: + chokidar: 3.5.3 + picocolors: 1.0.0 + dev: false + /vite/3.0.4_sass@1.54.1: resolution: {integrity: sha512-NU304nqnBeOx2MkQnskBQxVsa0pRAH5FphokTGmyy8M3oxbvw7qAXts2GORxs+h/2vKsD+osMhZ7An6yK6F1dA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3565,7 +3569,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} diff --git a/src/node/index.ts b/src/node/index.ts index 1487aa5..2333125 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -18,6 +18,7 @@ import { debounce } from 'perfect-debounce' import colors from 'picocolors' import type { RollupOutput } from 'rollup' import type { InlineConfig } from 'vite' +import liveReloadPlugin from 'vite-plugin-live-reload' import { name, version } from '../../package.json' import { PrettyError, handleError } from './errors' import { printFileInfo, toArray } from './utils' @@ -36,10 +37,18 @@ let resolvedPostCssConfig: PostCSSConfigResult async function createServer(options: ResolvedCliOptions) { const aliasDir = resolve(options.cwd, dirname(options.entry)) - const { alias = {}, extendViteConfig = {} } = resolvedKirbyupConfig + const { alias = {}, extendViteConfig = {}, reloadOnPhpChange = true } = resolvedKirbyupConfig + + const defaultWatchConf: Parameters = ['./**/*.php'] + const watchConf = typeof reloadOnPhpChange === 'boolean' ? defaultWatchConf : reloadOnPhpChange + + const plugins = [vuePlugin(), kirbyupAutoImportPlugin(), kirbyupHmrPlugin(options)] + + if (reloadOnPhpChange) + plugins.push(liveReloadPlugin(...watchConf)) const defaultConfig: InlineConfig = { - plugins: [vuePlugin(), kirbyupAutoImportPlugin(), kirbyupHmrPlugin(options)], + plugins, // Input needs to be specified so dep pre-bundling works build: { rollupOptions: { input: resolve(options.cwd, options.entry) } }, resolve: { diff --git a/src/node/types.ts b/src/node/types.ts index a28f66e..0db1836 100644 --- a/src/node/types.ts +++ b/src/node/types.ts @@ -1,5 +1,6 @@ import type { AliasOptions, InlineConfig } from 'vite' import type * as Postcss from 'postcss' +import type liveReloadPlugin from 'vite-plugin-live-reload' export type MarkRequired = Exclude & Required> @@ -28,6 +29,14 @@ export interface UserConfig { */ alias?: AliasOptions + /** + * Controls whether the plugin's PHP files are watched for changes. + * Pass true or false to enable or disable. Alternatively you can pass + * an array of arguments that are passed to vite-plugin-live-reload. + * The default is to watch all PHP files in the plugin directory. (./\*\*\/*.php) + */ + reloadOnPhpChange: boolean | Parameters + /** * Extends Vite's configuration. Will be merged with kirbyup's * default configuration. Be careful what to extend.