From 89dcd5341975464518935a62edbcda4bd9c57a72 Mon Sep 17 00:00:00 2001 From: chenjiahan Date: Sun, 21 Jan 2024 09:26:21 +0800 Subject: [PATCH 1/2] feat(server): support launch editor --- .../launch-editor-middleware/index.d.ts | 1 + .../launch-editor-middleware/index.js | 1 + .../compiled/launch-editor-middleware/license | 21 +++++++++ .../launch-editor-middleware/package.json | 1 + packages/core/src/server/devServer.ts | 8 +++- packages/core/src/server/getDevMiddlewares.ts | 10 ++++- packages/shared/src/types/server.ts | 4 +- pnpm-lock.yaml | 45 ++++++++++++++++++- scripts/prebundle/package.json | 19 ++++---- scripts/prebundle/src/constant.ts | 4 ++ 10 files changed, 100 insertions(+), 14 deletions(-) create mode 100644 packages/core/compiled/launch-editor-middleware/index.d.ts create mode 100644 packages/core/compiled/launch-editor-middleware/index.js create mode 100644 packages/core/compiled/launch-editor-middleware/license create mode 100644 packages/core/compiled/launch-editor-middleware/package.json diff --git a/packages/core/compiled/launch-editor-middleware/index.d.ts b/packages/core/compiled/launch-editor-middleware/index.d.ts new file mode 100644 index 0000000000..a2ac5f9bc2 --- /dev/null +++ b/packages/core/compiled/launch-editor-middleware/index.d.ts @@ -0,0 +1 @@ +export = any; diff --git a/packages/core/compiled/launch-editor-middleware/index.js b/packages/core/compiled/launch-editor-middleware/index.js new file mode 100644 index 0000000000..4024fb7b71 --- /dev/null +++ b/packages/core/compiled/launch-editor-middleware/index.js @@ -0,0 +1 @@ +(()=>{var e={426:(e,t,n)=>{const r=n(310);const i=n(17);const s=n(80);e.exports=(e,t,n)=>{if(typeof e==="function"){n=e;e=undefined}if(typeof t==="function"){n=t;t=undefined}t=t||process.cwd();return function launchEditorMiddleware(o,a,c){const{file:p}=r.parse(o.url,true).query||{};if(!p){a.statusCode=500;a.end(`launch-editor-middleware: required query param "file" is missing.`)}else{s(i.resolve(t,p),e,n);a.end()}}}},881:e=>{e.exports={atom:"atom",Brackets:"brackets","code-insiders":"code-insiders",code:"code",vscodium:"vscodium",codium:"codium",emacs:"emacs",gvim:"gvim","idea.sh":"idea","phpstorm.sh":"phpstorm","pycharm.sh":"pycharm","rubymine.sh":"rubymine",sublime_text:"subl",vim:"vim","webstorm.sh":"webstorm","goland.sh":"goland","rider.sh":"rider"}},341:e=>{e.exports={"/Applications/Atom.app/Contents/MacOS/Atom":"atom","/Applications/Atom Beta.app/Contents/MacOS/Atom Beta":"/Applications/Atom Beta.app/Contents/MacOS/Atom Beta","/Applications/Brackets.app/Contents/MacOS/Brackets":"brackets","/Applications/Sublime Text.app/Contents/MacOS/Sublime Text":"/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl","/Applications/Sublime Text.app/Contents/MacOS/sublime_text":"/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl","/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2":"/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl","/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text":"/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl","/Applications/Visual Studio Code.app/Contents/MacOS/Electron":"code","/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron":"code-insiders","/Applications/VSCodium.app/Contents/MacOS/Electron":"codium","/Applications/AppCode.app/Contents/MacOS/appcode":"/Applications/AppCode.app/Contents/MacOS/appcode","/Applications/CLion.app/Contents/MacOS/clion":"/Applications/CLion.app/Contents/MacOS/clion","/Applications/IntelliJ IDEA.app/Contents/MacOS/idea":"/Applications/IntelliJ IDEA.app/Contents/MacOS/idea","/Applications/PhpStorm.app/Contents/MacOS/phpstorm":"/Applications/PhpStorm.app/Contents/MacOS/phpstorm","/Applications/PyCharm.app/Contents/MacOS/pycharm":"/Applications/PyCharm.app/Contents/MacOS/pycharm","/Applications/PyCharm CE.app/Contents/MacOS/pycharm":"/Applications/PyCharm CE.app/Contents/MacOS/pycharm","/Applications/RubyMine.app/Contents/MacOS/rubymine":"/Applications/RubyMine.app/Contents/MacOS/rubymine","/Applications/WebStorm.app/Contents/MacOS/webstorm":"/Applications/WebStorm.app/Contents/MacOS/webstorm","/Applications/MacVim.app/Contents/MacOS/MacVim":"mvim","/Applications/GoLand.app/Contents/MacOS/goland":"/Applications/GoLand.app/Contents/MacOS/goland","/Applications/Rider.app/Contents/MacOS/rider":"/Applications/Rider.app/Contents/MacOS/rider"}},3:e=>{e.exports=["Brackets.exe","Code.exe","Code - Insiders.exe","VSCodium.exe","atom.exe","sublime_text.exe","notepad++.exe","clion.exe","clion64.exe","idea.exe","idea64.exe","phpstorm.exe","phpstorm64.exe","pycharm.exe","pycharm64.exe","rubymine.exe","rubymine64.exe","webstorm.exe","webstorm64.exe","goland.exe","goland64.exe","rider.exe","rider64.exe"]},417:(e,t,n)=>{const r=n(17);e.exports=function getArgumentsForPosition(e,t,n,i=1){const s=r.basename(e).replace(/\.(exe|cmd|bat)$/i,"");switch(s){case"atom":case"Atom":case"Atom Beta":case"subl":case"sublime":case"sublime_text":case"wstorm":case"charm":return[`${t}:${n}:${i}`];case"notepad++":return["-n"+n,"-c"+i,t];case"vim":case"mvim":return[`+call cursor(${n}, ${i})`,t];case"joe":case"gvim":return["+"+`${n}`,t];case"emacs":case"emacsclient":return[`+${n}:${i}`,t];case"rmate":case"mate":case"mine":return["--line",n,t];case"code":case"Code":case"code-insiders":case"Code - Insiders":case"codium":case"vscodium":case"VSCodium":return["-r","-g",`${t}:${n}:${i}`];case"appcode":case"clion":case"clion64":case"idea":case"idea64":case"phpstorm":case"phpstorm64":case"pycharm":case"pycharm64":case"rubymine":case"rubymine64":case"webstorm":case"webstorm64":case"goland":case"goland64":case"rider":case"rider64":return["--line",n,"--column",i,t]}if(process.env.LAUNCH_EDITOR){return[t,n,i]}return[t]}},841:(e,t,n)=>{const r=n(17);const i=n(522);const s=n(81);const o=n(341);const a=n(881);const c=n(3);e.exports=function guessEditor(e){if(e){return i.parse(e)}if(process.env.LAUNCH_EDITOR){return[process.env.LAUNCH_EDITOR]}if(process.versions.webcontainer){return[process.env.EDITOR||"code"]}try{if(process.platform==="darwin"){const e=s.execSync("ps x -o comm=",{stdio:["pipe","pipe","ignore"]}).toString();const t=Object.keys(o);const n=e.split("\n");for(let r=0;re.endsWith(s)));if(e!==undefined){return[e]}}}}else if(process.platform==="win32"){const e=s.execSync('powershell -NoProfile -Command "Get-CimInstance -Query \\"select executablepath from win32_process where executablepath is not null\\" | % { $_.ExecutablePath }"',{stdio:["pipe","pipe","ignore"]}).toString();const t=e.split("\r\n");for(let e=0;e{const r=n(147);const i=n(37);const s=n(17);const o=n(399);const a=n(81);const c=n(841);const p=n(417);function wrapErrorCallback(e){return(t,n)=>{console.log();console.log(o.red("Could not open "+s.basename(t)+" in the editor."));if(n){if(n[n.length-1]!=="."){n+="."}console.log(o.red("The editor process exited with an error: "+n))}console.log();if(e)e(t,n)}}function isTerminalEditor(e){switch(e){case"vim":case"emacs":case"nano":return true}return false}const l=/:(\d+)(:(\d+))?$/;function parseFile(e){const t=e.replace(l,"");const n=e.match(l);const r=n&&n[1];const i=n&&n[3];return{fileName:t,lineNumber:r,columnNumber:i}}let u=null;function launchEditor(e,t,n){const o=parseFile(e);let{fileName:l}=o;const{lineNumber:m,columnNumber:d}=o;if(!r.existsSync(l)){return}if(typeof t==="function"){n=t;t=undefined}n=wrapErrorCallback(n);const[f,...S]=c(t);if(!f){n(l,null);return}if(process.platform==="linux"&&l.startsWith("/mnt/")&&/Microsoft/i.test(i.release())){l=s.relative("",l)}if(m){const e=p(f,l,m,d);S.push.apply(S,e)}else{S.push(l)}if(u&&isTerminalEditor(f)){u.kill("SIGKILL")}if(process.platform==="win32"){u=a.spawn("cmd.exe",["/C",f].concat(S),{stdio:"inherit"})}else{u=a.spawn(f,S,{stdio:"inherit"})}u.on("exit",(function(e){u=null;if(e){n(l,"(code "+e+")")}}));u.on("error",(function(e){n(l,e.message)}))}e.exports=launchEditor},399:(e,t,n)=>{let r=n(224);let i=!("NO_COLOR"in process.env||process.argv.includes("--no-color"))&&("FORCE_COLOR"in process.env||process.argv.includes("--color")||process.platform==="win32"||r.isatty(1)&&process.env.TERM!=="dumb"||"CI"in process.env);let formatter=(e,t,n=e)=>r=>{let i=""+r;let s=i.indexOf(t,e.length);return~s?e+replaceClose(i,t,n,s)+t:e+i+t};let replaceClose=(e,t,n,r)=>{let i=e.substring(0,r)+n;let s=e.substring(r+t.length);let o=s.indexOf(t);return~o?i+replaceClose(s,t,n,o):i+s};let createColors=(e=i)=>({isColorSupported:e,reset:e?e=>`${e}`:String,bold:e?formatter("","",""):String,dim:e?formatter("","",""):String,italic:e?formatter("",""):String,underline:e?formatter("",""):String,inverse:e?formatter("",""):String,hidden:e?formatter("",""):String,strikethrough:e?formatter("",""):String,black:e?formatter("",""):String,red:e?formatter("",""):String,green:e?formatter("",""):String,yellow:e?formatter("",""):String,blue:e?formatter("",""):String,magenta:e?formatter("",""):String,cyan:e?formatter("",""):String,white:e?formatter("",""):String,gray:e?formatter("",""):String,bgBlack:e?formatter("",""):String,bgRed:e?formatter("",""):String,bgGreen:e?formatter("",""):String,bgYellow:e?formatter("",""):String,bgBlue:e?formatter("",""):String,bgMagenta:e?formatter("",""):String,bgCyan:e?formatter("",""):String,bgWhite:e?formatter("",""):String});e.exports=createColors();e.exports.createColors=createColors},522:(e,t,n)=>{"use strict";t.quote=n(392);t.parse=n(145)},145:e=>{"use strict";var t="(?:"+["\\|\\|","\\&\\&",";;","\\|\\&","\\<\\(","\\<\\<\\<",">>",">\\&","<\\&","[&;()|<>]"].join("|")+")";var n=new RegExp("^"+t+"$");var r="|&;()<> \\t";var i='"((\\\\"|[^"])*?)"';var s="'((\\\\'|[^'])*?)'";var o=/^#$/;var a="'";var c='"';var p="$";var l="";var u=4294967296;for(var m=0;m<4;m++){l+=(u*Math.random()).toString(16)}var d=new RegExp("^"+l);function matchAll(e,t){var n=t.lastIndex;var r=[];var i;while(i=t.exec(e)){r.push(i);if(t.lastIndex===i.index){t.lastIndex+=1}}t.lastIndex=n;return r}function getVar(e,t,n){var r=typeof e==="function"?e(n):e[n];if(typeof r==="undefined"&&n!=""){r=""}else if(typeof r==="undefined"){r="$"}if(typeof r==="object"){return t+l+JSON.stringify(r)+l}return t+r}function parseInternal(e,l,u){if(!u){u={}}var m=u.escape||"\\";var d="(\\"+m+"['\""+r+"]|[^\\s'\""+r+"])+";var f=new RegExp(["("+t+")","("+d+"|"+i+"|"+s+")+"].join("|"),"g");var S=matchAll(e,f);if(S.length===0){return[]}if(!l){l={}}var g=false;return S.map((function(t){var r=t[0];if(!r||g){return void undefined}if(n.test(r)){return{op:r}}var i=false;var s=false;var u="";var d=false;var f;function parseEnvVar(){f+=1;var e;var t;var n=r.charAt(f);if(n==="{"){f+=1;if(r.charAt(f)==="}"){throw new Error("Bad substitution: "+r.slice(f-2,f+1))}e=r.indexOf("}",f);if(e<0){throw new Error("Bad substitution: "+r.slice(f))}t=r.slice(f,e);f=e}else if(/[*@#?$!_-]/.test(n)){t=n;f+=1}else{var i=r.slice(f);e=i.match(/[^\w\d_]/);if(!e){t=i;f=r.length}else{t=i.slice(0,e.index);f+=e.index-1}}return getVar(l,"",t)}for(f=0;f{"use strict";e.exports=function quote(e){return e.map((function(e){if(e&&typeof e==="object"){return e.op.replace(/(.)/g,"\\$1")}if(/["\s]/.test(e)&&!/'/.test(e)){return"'"+e.replace(/(['\\])/g,"\\$1")+"'"}if(/["'\s]/.test(e)){return'"'+e.replace(/(["\\$`!])/g,"\\$1")+'"'}return String(e).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g,"$1\\$2")})).join(" ")}},81:e=>{"use strict";e.exports=require("child_process")},147:e=>{"use strict";e.exports=require("fs")},37:e=>{"use strict";e.exports=require("os")},17:e=>{"use strict";e.exports=require("path")},224:e=>{"use strict";e.exports=require("tty")},310:e=>{"use strict";e.exports=require("url")}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var i=t[n]={exports:{}};var s=true;try{e[n](i,i.exports,__nccwpck_require__);s=false}finally{if(s)delete t[n]}return i.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var n=__nccwpck_require__(426);module.exports=n})(); \ No newline at end of file diff --git a/packages/core/compiled/launch-editor-middleware/license b/packages/core/compiled/launch-editor-middleware/license new file mode 100644 index 0000000000..4e467aa91f --- /dev/null +++ b/packages/core/compiled/launch-editor-middleware/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/packages/core/compiled/launch-editor-middleware/package.json b/packages/core/compiled/launch-editor-middleware/package.json new file mode 100644 index 0000000000..71b190365d --- /dev/null +++ b/packages/core/compiled/launch-editor-middleware/package.json @@ -0,0 +1 @@ +{"name":"launch-editor-middleware","author":"Evan You","version":"2.6.1","license":"MIT","types":"index.d.ts","type":"commonjs"} diff --git a/packages/core/src/server/devServer.ts b/packages/core/src/server/devServer.ts index 956a354ef4..de420c8325 100644 --- a/packages/core/src/server/devServer.ts +++ b/packages/core/src/server/devServer.ts @@ -203,7 +203,13 @@ export async function startDevServer< compileMiddlewareAPI, }); - devMiddlewares.middlewares.forEach((m) => middlewares.use(m)); + devMiddlewares.middlewares.forEach((item) => { + if (Array.isArray(item)) { + middlewares.use(item[0], item[1]); + return; + } + middlewares.use(item); + }); middlewares.use(notFoundMiddleware); diff --git a/packages/core/src/server/getDevMiddlewares.ts b/packages/core/src/server/getDevMiddlewares.ts index 82f77f3d48..5f741e2d63 100644 --- a/packages/core/src/server/getDevMiddlewares.ts +++ b/packages/core/src/server/getDevMiddlewares.ts @@ -1,6 +1,7 @@ import url from 'url'; import type { ServerAPIs, + Middlewares, UpgradeEvent, RequestHandler, DevMiddlewaresConfig, @@ -56,7 +57,7 @@ const applyDefaultMiddlewares = async ({ }: { output: RsbuildDevMiddlewareOptions['output']; pwd: RsbuildDevMiddlewareOptions['pwd']; - middlewares: RequestHandler[]; + middlewares: Middlewares; dev: RsbuildDevMiddlewareOptions['dev']; compileMiddlewareAPI?: CompileMiddlewareAPI; }): Promise<{ @@ -106,6 +107,11 @@ const applyDefaultMiddlewares = async ({ }); } + const { default: launchEditorMiddleware } = await import( + '../../compiled/launch-editor-middleware' + ); + middlewares.push(['/__open-in-editor', launchEditorMiddleware()]); + if (compileMiddlewareAPI) { middlewares.push(compileMiddlewareAPI.middleware); @@ -164,7 +170,7 @@ const applyDefaultMiddlewares = async ({ }; export const getMiddlewares = async (options: RsbuildDevMiddlewareOptions) => { - const middlewares: RequestHandler[] = []; + const middlewares: Middlewares = []; const { compileMiddlewareAPI } = options; // Order: setupMiddlewares.unshift => internal middlewares => setupMiddlewares.push diff --git a/packages/shared/src/types/server.ts b/packages/shared/src/types/server.ts index 4d58cc34cd..49ff3f6c80 100644 --- a/packages/shared/src/types/server.ts +++ b/packages/shared/src/types/server.ts @@ -90,6 +90,8 @@ export type CompileMiddlewareAPI = { close: () => void; }; +export type Middlewares = Array; + export type DevServerAPIs = { /** * The resolved rsbuild server config @@ -131,7 +133,7 @@ export type DevServerAPIs = { */ overrides?: DevMiddlewaresConfig; }) => Promise<{ - middlewares: RequestHandler[]; + middlewares: Middlewares; close: () => Promise; /** * Subscribe http upgrade event diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 310c53303d..9af47ebeea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1421,6 +1421,9 @@ importers: json5: specifier: ^2.2.3 version: 2.2.3 + launch-editor-middleware: + specifier: ^2.6.1 + version: 2.6.1 less: specifier: 4.2.0 version: 4.2.0 @@ -8812,6 +8815,19 @@ packages: engines: {node: '>=6'} dev: true + /launch-editor-middleware@2.6.1: + resolution: {integrity: sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g==} + dependencies: + launch-editor: 2.6.1 + dev: true + + /launch-editor@2.6.1: + resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} + dependencies: + picocolors: 1.0.0 + shell-quote: 1.8.1 + dev: true + /leac@0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} dev: true @@ -11878,6 +11894,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true @@ -12538,6 +12558,29 @@ packages: webpack: 5.89.0(esbuild@0.19.8) dev: false + /terser-webpack-plugin@5.3.9(webpack@5.89.0): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.27.0 + webpack: 5.89.0 + /terser@5.19.2: resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} engines: {node: '>=10'} @@ -13397,7 +13440,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.89.0) + terser-webpack-plugin: 5.3.9(webpack@5.89.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: diff --git a/scripts/prebundle/package.json b/scripts/prebundle/package.json index 8791eee945..bf047a6bb6 100644 --- a/scripts/prebundle/package.json +++ b/scripts/prebundle/package.json @@ -35,38 +35,39 @@ "deepmerge": "^4.3.1", "dotenv": "16.3.2", "dotenv-expand": "10.0.0", - "fs-extra": "^11.1.1", "file-loader": "6.2.0", + "fs-extra": "^11.1.1", "gzip-size": "^6.0.0", "http-compression": "1.0.17", "http-proxy-middleware": "^2.0.6", "icss-utils": "5.1.0", - "less": "4.2.0", - "less-loader": "11.1.4", - "loader-utils2": "npm:loader-utils@2.0.4", "jiti": "^1.21.0", "json5": "^2.2.3", + "launch-editor-middleware": "^2.6.1", + "less": "4.2.0", + "less-loader": "11.1.4", "line-diff": "2.1.1", + "loader-utils2": "npm:loader-utils@2.0.4", "mime-types": "^2.1.35", "node-loader": "2.0.0", "open": "^8.4.0", "picocolors": "1.0.0", "postcss-flexbugs-fixes": "5.0.2", - "postcss-loader": "7.3.4", "postcss-load-config": "4.0.2", - "postcss-value-parser": "4.2.0", + "postcss-loader": "7.3.4", + "postcss-modules-extract-imports": "3.0.0", "postcss-modules-local-by-default": "4.0.4", "postcss-modules-scope": "3.1.1", "postcss-modules-values": "4.0.0", - "postcss-modules-extract-imports": "3.0.0", + "postcss-value-parser": "4.2.0", "resolve-url-loader": "5.0.0", + "rslog": "^1.2.0", "sass": "1.70.0", "sass-loader": "13.3.3", "semver": "^7.5.4", + "sirv": "^2.0.3", "style-loader": "3.3.4", "toml-loader": "1.0.0", - "rslog": "^1.2.0", - "sirv": "^2.0.3", "url-loader": "4.1.1", "webpack-bundle-analyzer": "4.9.0", "webpack-chain": "npm:webpack-5-chain@8.0.1", diff --git a/scripts/prebundle/src/constant.ts b/scripts/prebundle/src/constant.ts index bb29a699cb..f8d6d651cf 100644 --- a/scripts/prebundle/src/constant.ts +++ b/scripts/prebundle/src/constant.ts @@ -43,6 +43,10 @@ export const TASKS: TaskConfig[] = [ 'dotenv', 'dotenv-expand', 'ws', + { + name: 'launch-editor-middleware', + ignoreDts: true, + }, { name: 'sirv', afterBundle(task) { From a08ffb5d35a5a28833343b382e356dd8864f0731 Mon Sep 17 00:00:00 2001 From: chenjiahan Date: Sun, 21 Jan 2024 09:37:10 +0800 Subject: [PATCH 2/2] test: fix e2e --- e2e/cases/server/custom-server/scripts/pure-server.mjs | 8 +++++++- e2e/cases/server/custom-server/scripts/server.mjs | 8 +++++++- packages/core/src/server/devServer.ts | 6 +++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/e2e/cases/server/custom-server/scripts/pure-server.mjs b/e2e/cases/server/custom-server/scripts/pure-server.mjs index 1adeb9d737..739c1807d5 100644 --- a/e2e/cases/server/custom-server/scripts/pure-server.mjs +++ b/e2e/cases/server/custom-server/scripts/pure-server.mjs @@ -44,7 +44,13 @@ export async function startDevServerPure(fixtures) { res.end('Hello World!'); }); - app.use(...middlewares); + middlewares.forEach((item) => { + if (Array.isArray(item)) { + app.use(...item); + } else { + app.use(item); + } + }); app.get('/bbb', (_req, res) => { res.end('Hello Express!'); diff --git a/e2e/cases/server/custom-server/scripts/server.mjs b/e2e/cases/server/custom-server/scripts/server.mjs index dccbe43345..0b2cf7c554 100644 --- a/e2e/cases/server/custom-server/scripts/server.mjs +++ b/e2e/cases/server/custom-server/scripts/server.mjs @@ -32,7 +32,13 @@ export async function startDevServer(fixtures) { res.end('Hello World!'); }); - app.use(...middlewares); + middlewares.forEach((item) => { + if (Array.isArray(item)) { + app.use(...item); + } else { + app.use(item); + } + }); app.get('/bbb', (_req, res) => { res.end('Hello Express!'); diff --git a/packages/core/src/server/devServer.ts b/packages/core/src/server/devServer.ts index de420c8325..f17787f5bc 100644 --- a/packages/core/src/server/devServer.ts +++ b/packages/core/src/server/devServer.ts @@ -205,10 +205,10 @@ export async function startDevServer< devMiddlewares.middlewares.forEach((item) => { if (Array.isArray(item)) { - middlewares.use(item[0], item[1]); - return; + middlewares.use(...item); + } else { + middlewares.use(item); } - middlewares.use(item); }); middlewares.use(notFoundMiddleware);