ms-vite-plugin 1.4.51 → 1.4.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/build.js CHANGED
@@ -1 +1 @@
1
- "use strict";var J=Object.create;var O=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var z=(t,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of $(e))!q.call(t,o)&&o!==i&&O(t,o,{get:()=>e[o],enumerable:!(s=x(e,o))||s.enumerable});return t};var L=(t,e,i)=>(i=t!=null?J(M(t)):{},z(e||!t||!t.__esModule?O(i,"default",{value:t,enumerable:!0}):i,t));var N=exports&&exports.__createBinding||(Object.create?(function(t,e,i,s){s===void 0&&(s=i);var o=Object.getOwnPropertyDescriptor(e,i);(!o||("get"in o?!e.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(t,s,o)}):(function(t,e,i,s){s===void 0&&(s=i),t[s]=e[i]})),W=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),_=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(i){var s=[];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(s[s.length]=o);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var s=t(e),o=0;o<s.length;o++)s[o]!=="default"&&N(i,e,s[o]);return W(i,e),i}})(),D=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildAll=void 0;const A=D(require("archiver")),P=require("child_process"),r=_(require("fs-extra")),E=_(require("os")),n=_(require("path")),K=require("./stopGuardPlugin"),T=D(require("vite-plugin-bundle-obfuscator"));async function C(t,e){const i=(0,A.default)("zip",{zlib:{level:9}}),s=r.createWriteStream(e);return new Promise((o,c)=>{i.directory(t,!1).on("error",a=>c(a)).pipe(s),s.on("close",()=>o()),i.finalize()})}async function G(t,e){const i=[];async function s(o){const c=await r.readdir(o,{withFileTypes:!0});for(const a of c){const u=n.resolve(o,a.name);a.isDirectory()?await s(u):a.isFile()&&(/^main\.(js|ts)$/.test(a.name)||/_thread\.(js|ts)$/.test(a.name))&&i.push(n.relative(e,u))}}return await s(t),i}function B(){const t=[{cmd:n.join(E.homedir(),".KuaiJSDevloper","python","python.exe"),args:["--version"]},{cmd:n.join(E.homedir(),".KuaiJSDevloper","python","bin","python"),args:["--version"]},{cmd:"python",args:["--version"]},{cmd:"python3",args:["--version"]},{cmd:"python3.14",args:["--version"]}];for(const e of t)try{const i=(0,P.spawnSync)(e.cmd,e.args,{encoding:"utf8"}),s=(i.stdout||i.stderr||"").trim();if(s&&/Python\s+3\.14(\.\d+)?/i.test(s))return{ok:!0,path:e.cmd,version:s}}catch{}return{ok:!1}}async function R(t){async function e(i){const s=await r.readdir(i,{withFileTypes:!0});for(const o of s){const c=n.join(i,o.name);if(o.isDirectory())if(o.name==="__pycache__"){const a=await r.readdir(c,{withFileTypes:!0});for(const u of a){const b=n.join(c,u.name);if(u.isFile()&&u.name.endsWith(".cpython-314.pyc")){const v=n.dirname(c),m=u.name.replace(/\.cpython-314\.pyc$/,".pyc"),w=n.join(v,m);await r.move(b,w,{overwrite:!0})}}try{await r.remove(c)}catch{}}else await e(c);else if(o.isFile())if(o.name.endsWith(".cpython-314.pyc")){const a=c.replace(".cpython-314.pyc",".pyc");await r.move(c,a,{overwrite:!0})}else o.name.endsWith(".py")&&await r.remove(c)}}await e(t)}const H=async(t=!0,e)=>{const i=n.join(e,"scripts"),s=await r.pathExists(n.join(i,"main.js"))||await r.pathExists(n.join(i,"main.ts")),o=await r.pathExists(n.join(i,"main.py")),c=await r.pathExists(n.join(i,"main.lua"));if(s){console.log("\u{1F680} \u5F00\u59CB\u6784\u5EFAJavaScript\u9879\u76EE...");const{build:l}=await import("vite"),f=n.join(e,"obfuscator.json");await r.pathExists(f)||(console.error("\u274C \u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F\u6709\u6548\u7684 \u5FEB\u70B9JS \u9879\u76EE"),console.error("\u8BF7\u786E\u4FDD\u76EE\u5F55\u5305\u542B\u4EE5\u4E0B\u6587\u4EF6:"),console.error(" - obfuscator.json"),process.exit(1));const h=await r.readJSON(f),j=n.join(e,t?"dist":"msbundle"),d=await G(i,i);await r.remove(j);for(const p of d)await l({root:e,build:{lib:{entry:{[n.basename(p,n.extname(p))]:`./scripts/${p}`},fileName:()=>p.replace(/\.ts$/,".js"),formats:["iife"],name:"KuaiJS"},outDir:t?"dist/scripts":"msbundle/scripts",emptyOutDir:!1,sourcemap:t,minify:!t,target:"safari15"},plugins:[(0,K.createStopGuardPlugin)(),...t?[]:[h.enabled?(0,T.default)({autoExcludeNodeModules:!0,threadPool:!0,options:{...h,target:"browser",debugProtection:!1,disableConsoleOutput:!1,domainLock:[],selfDefending:!1,renameGlobals:!1,renameProperties:!1}}):[]]]})}if(t)return;const a=n.join(e,"msbundle");if(await r.ensureDir(a),(o||c)&&await r.copy(n.join(e,"scripts"),n.join(a,"scripts")),o){const l=B();if(l.ok){console.log(`\u2705 \u68C0\u6D4B\u5230 ${l.version} (${l.path})`);const f=(0,P.spawnSync)(l.path,["-m","compileall","scripts"],{encoding:"utf8",cwd:a});f.status===0?(console.log("\u2705 \u6210\u529F\u7F16\u8BD1\u6240\u6709 Python \u6587\u4EF6"),await R(n.join(a,"scripts"))):(console.error("\u274C \u7F16\u8BD1 Python \u6587\u4EF6\u5931\u8D25"),console.error(f.stderr),process.exit(1))}else console.warn("\u26A0\uFE0F \u672A\u68C0\u6D4B\u5230 Python 3.14\uFF0C\u8BF7\u786E\u4FDD\u5728\u76EE\u6807\u8FD0\u884C\u73AF\u5883\u5B89\u88C5 Python 3.14")}else if(c){const l=n.join(a,"scripts"),f=[],h=async d=>{const p=await r.readdir(d,{withFileTypes:!0});for(const y of p){const g=n.join(d,y.name);y.isDirectory()?await h(g):y.isFile()&&y.name.endsWith(".lua")&&f.push(g)}};await h(l);const j=n.resolve(process.cwd(),"node_modules/@gamely/prometheus-cli/bin/cli.js");await r.pathExists(j)||(console.error("\u274C \u672A\u627E\u5230 @gamely/prometheus-cli\uFF0C\u65E0\u6CD5\u6DF7\u6DC6 Lua"),process.exit(1));for(const d of f){const p=n.relative(l,d);console.log(`\u{1F6E0}\uFE0F \u6DF7\u6DC6 Lua: ${p}`);const y=(0,P.spawnSync)(process.execPath,[j,p,"--preset","Medium"],{cwd:l,encoding:"utf8"});y.status!==0&&(console.error("\u274C \u6DF7\u6DC6 Lua \u5931\u8D25:",p),console.error(y.stderr||y.stdout||""),process.exit(1));const g=p.replace(/\.lua$/,".obfuscated.lua"),S=n.join(l,g);await r.pathExists(S)&&(await r.remove(d),await r.move(S,d,{overwrite:!0}))}console.log("\u2705 Lua \u6DF7\u6DC6\u5B8C\u6210")}await r.copy(n.join(e,"res"),n.join(a,"res")),await r.copy(n.join(e,"ui"),n.join(a,"ui"));for(const l of["logo.jpg","logo.png"]){const f=n.join(e,l);await r.pathExists(f)&&await r.copy(f,n.join(a,l))}const u=n.join(e,"dist"),b=n.join(e,"package.json"),v=n.join(a,"package.json"),m=await r.readJSON(b);delete m.scripts,delete m.devDependencies,delete m.dependencies,await r.writeJSON(v,m,{spaces:2}),await r.emptyDir(u);const w=n.join(u,"ms.zip"),F=n.join(u,"ms.msbundle");await C(a,w),await r.rename(w,F),await r.remove(a)};exports.buildAll=H;
1
+ "use strict";var L=Object.create;var D=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var N=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of J(e))!z.call(t,i)&&i!==n&&D(t,i,{get:()=>e[i],enumerable:!(s=x(e,i))||s.enumerable});return t};var q=(t,e,n)=>(n=t!=null?L($(t)):{},N(e||!t||!t.__esModule?D(n,"default",{value:t,enumerable:!0}):n,t));var C=exports&&exports.__createBinding||(Object.create?(function(t,e,n,s){s===void 0&&(s=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,s,i)}):(function(t,e,n,s){s===void 0&&(s=n),t[s]=e[n]})),W=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),O=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(n){var s=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(s[s.length]=i);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var s=t(e),i=0;i<s.length;i++)s[i]!=="default"&&C(n,e,s[i]);return W(n,e),n}})(),E=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildAll=void 0;const A=E(require("archiver")),S=require("child_process"),r=O(require("fs-extra")),M=O(require("os")),o=O(require("path")),K=require("./stopGuardPlugin"),T=E(require("vite-plugin-bundle-obfuscator"));async function G(t,e){const n=(0,A.default)("zip",{zlib:{level:9}}),s=r.createWriteStream(e);return new Promise((i,c)=>{n.directory(t,!1).on("error",a=>c(a)).pipe(s),s.on("close",()=>i()),n.finalize()})}async function B(t,e){const n=[];async function s(i){const c=await r.readdir(i,{withFileTypes:!0});for(const a of c){const f=o.resolve(i,a.name);a.isDirectory()?await s(f):a.isFile()&&(/^main\.(js|ts)$/.test(a.name)||/_thread\.(js|ts)$/.test(a.name))&&n.push(o.relative(e,f))}}return await s(t),n}function R(){const t=[{cmd:o.join(M.homedir(),".KuaiJSDevloper","python","python.exe"),args:["--version"]},{cmd:o.join(M.homedir(),".KuaiJSDevloper","python","bin","python"),args:["--version"]},{cmd:"python",args:["--version"]},{cmd:"python3",args:["--version"]},{cmd:"python3.14",args:["--version"]}];for(const e of t)try{const n=(0,S.spawnSync)(e.cmd,e.args,{encoding:"utf8"}),s=(n.stdout||n.stderr||"").trim();if(s&&/Python\s+3\.14(\.\d+)?/i.test(s))return{ok:!0,path:e.cmd,version:s}}catch{}return{ok:!1}}async function H(t){async function e(n){const s=await r.readdir(n,{withFileTypes:!0});for(const i of s){const c=o.join(n,i.name);if(i.isDirectory())if(i.name==="__pycache__"){const a=await r.readdir(c,{withFileTypes:!0});for(const f of a){const _=o.join(c,f.name);if(f.isFile()&&f.name.endsWith(".cpython-314.pyc")){const v=o.dirname(c),m=f.name.replace(/\.cpython-314\.pyc$/,".pyc"),w=o.join(v,m);await r.move(_,w,{overwrite:!0})}}try{await r.remove(c)}catch{}}else await e(c);else if(i.isFile())if(i.name.endsWith(".cpython-314.pyc")){const a=c.replace(".cpython-314.pyc",".pyc");await r.move(c,a,{overwrite:!0})}else i.name.endsWith(".py")&&await r.remove(c)}}await e(t)}const I=["Minify","Weak","Medium","Strong"];async function Q(t){const e=o.join(t,"obfuscator.json");if(!await r.pathExists(e))return{enabled:!0,preset:"Medium"};try{const n=await r.readJSON(e),s=n?.enabled!==!1,i=U(n?.preset);return{enabled:s,preset:i}}catch(n){return console.error("\u274C \u65E0\u6CD5\u8BFB\u53D6 obfuscator.json"),console.error(n instanceof Error?n.message:String(n)),process.exit(1),{enabled:!0,preset:"Medium"}}}function U(t){if(typeof t!="string")return"Medium";const e=I.find(n=>n.toLowerCase()===t.trim().toLowerCase());return e||(console.warn(`\u26A0\uFE0F obfuscator.json \u7684 preset \u65E0\u6548: ${t}\uFF0C\u5DF2\u6539\u7528 Medium`),"Medium")}function V(t){return[o.join(t,"node_modules/@gamely/prometheus-cli/bin/cli.js"),o.join(t,"node_modules/ms-vite-plugin/node_modules/@gamely/prometheus-cli/bin/cli.js"),o.resolve(process.cwd(),"node_modules/@gamely/prometheus-cli/bin/cli.js")].find(n=>r.pathExistsSync(n))}const X=async(t=!0,e)=>{const n=o.join(e,"scripts"),s=await r.pathExists(o.join(n,"main.js"))||await r.pathExists(o.join(n,"main.ts")),i=await r.pathExists(o.join(n,"main.py")),c=await r.pathExists(o.join(n,"main.lua"));if(s){console.log("\u{1F680} \u5F00\u59CB\u6784\u5EFAJavaScript\u9879\u76EE...");const{build:l}=await import("vite"),u=o.join(e,"obfuscator.json");await r.pathExists(u)||(console.error("\u274C \u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F\u6709\u6548\u7684 \u5FEB\u70B9JS \u9879\u76EE"),console.error("\u8BF7\u786E\u4FDD\u76EE\u5F55\u5305\u542B\u4EE5\u4E0B\u6587\u4EF6:"),console.error(" - obfuscator.json"),process.exit(1));const h=await r.readJSON(u),b=o.join(e,t?"dist":"msbundle"),j=await B(n,n);await r.remove(b);for(const d of j)await l({root:e,build:{lib:{entry:{[o.basename(d,o.extname(d))]:`./scripts/${d}`},fileName:()=>d.replace(/\.ts$/,".js"),formats:["iife"],name:"KuaiJS"},outDir:t?"dist/scripts":"msbundle/scripts",emptyOutDir:!1,sourcemap:t,minify:!t,target:"safari15"},plugins:[(0,K.createStopGuardPlugin)(),...t?[]:[h.enabled?(0,T.default)({autoExcludeNodeModules:!0,threadPool:!0,options:{...h,target:"browser",debugProtection:!1,disableConsoleOutput:!1,domainLock:[],selfDefending:!1,renameGlobals:!1,renameProperties:!1}}):[]]]})}if(t)return;const a=o.join(e,"msbundle");if(await r.ensureDir(a),(i||c)&&await r.copy(o.join(e,"scripts"),o.join(a,"scripts")),i){const l=R();if(l.ok){console.log(`\u2705 \u68C0\u6D4B\u5230 ${l.version} (${l.path})`);const u=(0,S.spawnSync)(l.path,["-m","compileall","scripts"],{encoding:"utf8",cwd:a});u.status===0?(console.log("\u2705 \u6210\u529F\u7F16\u8BD1\u6240\u6709 Python \u6587\u4EF6"),await H(o.join(a,"scripts"))):(console.error("\u274C \u7F16\u8BD1 Python \u6587\u4EF6\u5931\u8D25"),console.error(u.stderr),process.exit(1))}else console.warn("\u26A0\uFE0F \u672A\u68C0\u6D4B\u5230 Python 3.14\uFF0C\u8BF7\u786E\u4FDD\u5728\u76EE\u6807\u8FD0\u884C\u73AF\u5883\u5B89\u88C5 Python 3.14")}else if(c){const l=await Q(e);if(!l.enabled)console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u6DF7\u6DC6\uFF08obfuscator.json enabled=false\uFF09");else{const u=o.join(a,"scripts"),h=[],b=async d=>{const y=await r.readdir(d,{withFileTypes:!0});for(const p of y){const g=o.join(d,p.name);p.isDirectory()?await b(g):p.isFile()&&p.name.endsWith(".lua")&&h.push(g)}};await b(u);const j=V(e);j||(console.error("\u274C \u672A\u627E\u5230 @gamely/prometheus-cli\uFF0C\u65E0\u6CD5\u6DF7\u6DC6 Lua"),process.exit(1));for(const d of h){const y=o.relative(u,d);console.log(`\u{1F6E0}\uFE0F \u6DF7\u6DC6 Lua: ${y} (preset=${l.preset})`);const p=(0,S.spawnSync)(process.execPath,[j,y,"--preset",l.preset],{cwd:u,encoding:"utf8"});p.status!==0&&(console.error("\u274C \u6DF7\u6DC6 Lua \u5931\u8D25:",y),console.error(p.stderr||p.stdout||""),process.exit(1));const g=y.replace(/\.lua$/,".obfuscated.lua"),P=o.join(u,g);await r.pathExists(P)&&(await r.remove(d),await r.move(P,d,{overwrite:!0}))}console.log("\u2705 Lua \u6DF7\u6DC6\u5B8C\u6210")}}await r.copy(o.join(e,"res"),o.join(a,"res")),await r.copy(o.join(e,"ui"),o.join(a,"ui"));for(const l of["logo.jpg","logo.png"]){const u=o.join(e,l);await r.pathExists(u)&&await r.copy(u,o.join(a,l))}const f=o.join(e,"dist"),_=o.join(e,"package.json"),v=o.join(a,"package.json"),m=await r.readJSON(_);delete m.scripts,delete m.devDependencies,delete m.dependencies,await r.writeJSON(v,m,{spaces:2}),await r.emptyDir(f);const w=o.join(f,"ms.zip"),F=o.join(f,"ms.msbundle");await G(a,w),await r.rename(w,F),await r.remove(a)};exports.buildAll=X;
@@ -5,13 +5,16 @@
5
5
  **注意**
6
6
 
7
7
  - 仅支持快点 Agent 模式
8
- - 用完调用 `releaseNode()` 释放;找完节点即可释放,不必等点击结束
8
+ - 用完应释放选择器,两种写法自行选择:
9
+ - **自动**:`local selector <close> = node.createNodeSelector()`,离开当前作用域释放
10
+ - **手动**:`selector:releaseNode()`,找完节点即可释放,不必等点击结束
11
+ - 普通 `local selector = ...` 若既不用 `<close>` 也不调 `releaseNode()`,不会立刻释放
9
12
 
10
13
  **基本流程**
11
14
 
12
15
  ```text
13
16
  createNodeSelector → 设置筛选条件 → getOneNodeInfo / getNodeInfo
14
- → 点击 / 输入 / 设值等 → releaseNode
17
+ → 点击 / 输入 / 设值等 → 自动 <close> 或手动 releaseNode
15
18
  ```
16
19
 
17
20
  ---
@@ -30,7 +33,9 @@ function node.createNodeSelector(params) end
30
33
  | `mode` | `1` | 抓取模式,可选 `1` / `2` / `3`,默认 `1` |
31
34
 
32
35
  ```lua
33
- local selector = node.createNodeSelector()
36
+ -- 自动释放:离开作用域时释放
37
+ local selector <close> = node.createNodeSelector()
38
+ -- 手动释放:用完后自己调 releaseNode
34
39
  local shallow = node.createNodeSelector({ maxDepth = 15 })
35
40
  local listPage = node.createNodeSelector({ mode = 2 })
36
41
  ```
@@ -88,7 +93,7 @@ local listPage = node.createNodeSelector({ mode = 2 })
88
93
 
89
94
  | 方法 | 说明 |
90
95
  | --- | --- |
91
- | `releaseNode()` | 释放内存 |
96
+ | `releaseNode()` | 立刻释放选择器;与 `<close>` 二选一即可,重复调用安全 |
92
97
  | `loadNode(timeout?)` | 重新加载界面节点,默认超时 5000ms |
93
98
  | `clearSelector()` | 清除已设置的筛选条件 |
94
99
  | `xml(timeout?)` | 获取界面 XML,失败返回 `nil` |
@@ -102,7 +107,10 @@ local selector = node.createNodeSelector()
102
107
  local nodes = selector:label("确定"):getNodeInfo(5000)
103
108
  local one = selector:getOneNodeInfo(3000)
104
109
  local xml = selector:xml()
105
- selector:releaseNode()
110
+ selector:releaseNode() -- 手动释放
111
+
112
+ -- 或自动释放:
113
+ -- local selector <close> = node.createNodeSelector()
106
114
  ```
107
115
 
108
116
  ### 筛选条件
@@ -168,7 +176,7 @@ selector
168
176
 
169
177
  ```lua
170
178
  local node = require("node")
171
- local selector = node.createNodeSelector()
179
+ local selector <close> = node.createNodeSelector()
172
180
  local btn = selector:label("确定"):type("XCUIElementTypeButton"):getOneNodeInfo(3000)
173
181
 
174
182
  if btn then
@@ -199,7 +207,7 @@ end
199
207
  ```lua
200
208
  local node = require("node")
201
209
  local ime = require("ime")
202
- local selector = node.createNodeSelector()
210
+ local selector <close> = node.createNodeSelector()
203
211
 
204
212
  local user = selector:type("XCUIElementTypeTextField"):getOneNodeInfo(5000)
205
213
  if user then
@@ -232,7 +240,7 @@ end
232
240
 
233
241
  ```lua
234
242
  local node = require("node")
235
- local selector = node.createNodeSelector({ mode = 2 })
243
+ local selector <close> = node.createNodeSelector({ mode = 2 })
236
244
  local item = selector:label("第 30 项"):getOneNodeInfo(5000)
237
245
  if item then
238
246
  item:clickCenter()
@@ -262,3 +270,6 @@ selector:releaseNode()
262
270
 
263
271
  **输入叠在旧文字后面**
264
272
  节点没有输入方法,请先 `ime.clearText()` 再 `ime.input()`。
273
+
274
+ **要不要释放**
275
+ 要。用 `<close>` 自动释放,或用完调 `releaseNode()`,两种都行。
@@ -37,7 +37,7 @@
37
37
  ├─ .npmrc ← npm 配置文件
38
38
  ├─ .prettierignore ← 代码格式化忽略文件(仅js项目)
39
39
  ├─ .prettierrc.yaml ← 代码格式化配置(需安装 Prettier 插件,仅js项目)
40
- ├─ obfuscator.json ← 代码混淆配置(javascript-obfuscator,仅js项目)
40
+ ├─ obfuscator.json ← 代码混淆配置(JS:javascript-obfuscator;Lua:Prometheus,可开关和选档位)
41
41
  ├─ package.json ← 项目依赖配置文件
42
42
  └─ tsconfig.json ← TypeScript 配置文件(用于js提示和网页提示)
43
43
  ```
@@ -9,6 +9,7 @@
9
9
 
10
10
  - 打开主脚本 `main.js | main.py | main.lua`,右键编辑器,选择 `快点JS` -> `打包应用`
11
11
  - 输入在开发者后台->网络验证管理->软件列表 中获取的 `AppId` 字段
12
+ - JS / Lua 项目可编辑根目录 `obfuscator.json` 决定打包时是否混淆、用哪档强度;Python 打包编译为 `.pyc`,没有该混淆配置
12
13
  - 注意:上传到快点JS热更新服务后,可通过开发者后台->网络验证管理->软件列表的软件编号进行分发
13
14
  - 注意:快点JS上可通过软件面板,输入软件编号进行搜索加载应用
14
15
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ms-vite-plugin",
3
- "version": "1.4.51",
3
+ "version": "1.4.53",
4
4
  "type": "commonjs",
5
5
  "license": "MIT",
6
6
  "publishConfig": {