@lark-apaas/miaoda-cli 0.1.17 → 0.1.18-alpha.5fd4656
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/cli/commands/app/index.js +16 -0
- package/dist/cli/commands/index.js +10 -0
- package/dist/cli/handlers/app/init.js +45 -12
- package/dist/cli/handlers/app/migrate.js +5 -1
- package/dist/cli/handlers/app/sync.js +5 -0
- package/dist/config/sync-configs/design-html.js +25 -0
- package/dist/config/sync-configs/index.js +2 -0
- package/dist/services/app/init/async-install.js +116 -0
- package/dist/services/app/init/index.js +6 -1
- package/dist/services/app/init/template.js +1 -0
- package/dist/services/deploy/modern/atoms/design-build.js +20 -0
- package/dist/services/deploy/modern/atoms/design-upload.js +73 -0
- package/dist/services/deploy/modern/atoms/index.js +5 -1
- package/dist/services/deploy/modern/atoms/tosutil.js +234 -0
- package/dist/services/deploy/modern/atoms/upload.js +4 -127
- package/dist/services/deploy/modern/pipelines/design-local.js +47 -0
- package/dist/services/deploy/modern/pipelines/index.js +3 -1
- package/dist/services/deploy/modern/protocol.js +7 -0
- package/dist/services/deploy/modern/run.js +10 -4
- package/dist/services/deploy/modern/template-key-map.js +4 -0
- package/dist/utils/logs-dir.js +19 -0
- package/package.json +1 -1
- package/upgrade/templates/design-html/templates/scripts/build.sh +70 -0
- package/upgrade/templates/design-stack/templates/.githooks/pre-commit +1 -0
- package/upgrade/templates/design-stack/templates/scripts/dev-local.js +69 -10
- package/upgrade/templates/design-stack/templates/scripts/hooks/run-precommit.js +36 -0
- package/upgrade/templates/nestjs-react-fullstack/templates/.githooks/pre-commit +1 -0
- package/upgrade/templates/nestjs-react-fullstack/templates/.spark_project +2 -2
- package/upgrade/templates/nestjs-react-fullstack/templates/scripts/dev-local.js +71 -13
- package/upgrade/templates/nestjs-react-fullstack/templates/scripts/hooks/run-precommit.js +36 -0
|
@@ -5,9 +5,11 @@
|
|
|
5
5
|
//
|
|
6
6
|
// 流程:
|
|
7
7
|
// 1. env pull —— 拉沙箱身份/凭证到 .env.local
|
|
8
|
-
// 2.
|
|
9
|
-
// 3.
|
|
10
|
-
// 4.
|
|
8
|
+
// 2. action-plugin init —— 装 user app 在 package.json.actionPlugins 里声明的插件
|
|
9
|
+
// 3. skills sync —— 同步当前 stack 的 agent skills
|
|
10
|
+
// 4. dotenv 加载 .env / .env.local 到 process.env(含 SUDA_WEBUSER 适配)
|
|
11
|
+
// 5. 起单进程 dev server(design-stack 单进程,无 server/client 拆分),
|
|
12
|
+
// stdout/stderr 整体 tee 到 logs/dev.std.log
|
|
11
13
|
//
|
|
12
14
|
// 设计同 nestjs-react-fullstack/dev-local.js,SDK 包不需要自己 require('dotenv'),
|
|
13
15
|
// env 加载收敛在启动脚本单点。SUDA_WEBUSER 适配同 nrf 那份。
|
|
@@ -26,7 +28,11 @@ function warn(msg) {
|
|
|
26
28
|
if (!process.env.MIAODA_APP_TYPE) process.env.MIAODA_APP_TYPE = '4';
|
|
27
29
|
process.env.MIAODA_LOCAL_DEV = '1';
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
// 先建 logs/,防止任何步骤(尤其是 spawn 子进程前的 shell redirect)因父目录不存在挂掉
|
|
32
|
+
const LOG_DIR = process.env.LOG_DIR || 'logs';
|
|
33
|
+
fs.mkdirSync(LOG_DIR, { recursive: true });
|
|
34
|
+
|
|
35
|
+
console.log('[dev-local] (1/5) env pull...');
|
|
30
36
|
const hasLarkCli = spawnSync('command', ['-v', 'lark-cli'], { shell: true, stdio: 'ignore' }).status === 0;
|
|
31
37
|
if (hasLarkCli) {
|
|
32
38
|
let appId = '';
|
|
@@ -47,15 +53,23 @@ if (hasLarkCli) {
|
|
|
47
53
|
warn('lark-cli 未安装,跳过 env pull;请确保 .env.local 已就绪');
|
|
48
54
|
}
|
|
49
55
|
|
|
56
|
+
// action-plugin init —— 装 user app 在 package.json.actionPlugins 里声明的插件。
|
|
57
|
+
console.log('[dev-local] (2/5) action-plugin init...');
|
|
58
|
+
try {
|
|
59
|
+
execSync('npx -y @lark-apaas/fullstack-cli@latest action-plugin init', { stdio: 'inherit' });
|
|
60
|
+
} catch {
|
|
61
|
+
warn('action-plugin init 失败,继续启动');
|
|
62
|
+
}
|
|
63
|
+
|
|
50
64
|
// skills sync —— --local 切 flat layout;不传 --version,handler 默认 coding-steering@latest。
|
|
51
|
-
console.log('[dev-local] (
|
|
65
|
+
console.log('[dev-local] (3/5) miaoda skills sync...');
|
|
52
66
|
try {
|
|
53
67
|
execSync('npx -y @lark-apaas/miaoda-cli@latest skills sync --local', { stdio: 'inherit' });
|
|
54
68
|
} catch {
|
|
55
69
|
console.log(' (skills sync 失败,继续启动)');
|
|
56
70
|
}
|
|
57
71
|
|
|
58
|
-
console.log('[dev-local] (
|
|
72
|
+
console.log('[dev-local] (4/5) loading .env / .env.local...');
|
|
59
73
|
const dotenv = require('dotenv');
|
|
60
74
|
dotenv.config({ path: '.env.local' });
|
|
61
75
|
dotenv.config({ path: '.env' });
|
|
@@ -75,10 +89,55 @@ if (process.env.SUDA_WEBUSER) {
|
|
|
75
89
|
}
|
|
76
90
|
}
|
|
77
91
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
92
|
+
const devLogPath = path.join(LOG_DIR, 'dev.std.log');
|
|
93
|
+
console.log('[dev-local] (5/5) npm run dev');
|
|
94
|
+
console.log(`[dev-local] 日志: ${devLogPath}`);
|
|
95
|
+
|
|
96
|
+
const logFd = fs.openSync(devLogPath, 'a');
|
|
97
|
+
const child = spawn('npm', ['run', 'dev'], {
|
|
98
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
99
|
+
env: process.env,
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const tee = (src) =>
|
|
103
|
+
src.on('data', (chunk) => {
|
|
104
|
+
try {
|
|
105
|
+
process.stdout.write(chunk);
|
|
106
|
+
} catch {
|
|
107
|
+
/* terminal gone */
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
fs.writeSync(logFd, chunk);
|
|
111
|
+
} catch {
|
|
112
|
+
/* log fd closed */
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
tee(child.stdout);
|
|
116
|
+
tee(child.stderr);
|
|
117
|
+
|
|
118
|
+
// 外部 SIGTERM/SIGHUP 转发给 npm,避免本进程死了 nest 变孤儿
|
|
119
|
+
// (SIGINT 在 TTY 下 shell 直接发给整个前台进程组,不需要转发)
|
|
120
|
+
const forward = (sig) => () => {
|
|
121
|
+
try {
|
|
122
|
+
child.kill(sig);
|
|
123
|
+
} catch {
|
|
124
|
+
/* already gone */
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
process.on('SIGTERM', forward('SIGTERM'));
|
|
128
|
+
process.on('SIGHUP', forward('SIGHUP'));
|
|
129
|
+
|
|
130
|
+
// 'close' 而非 'exit':等 child 的 stdio stream drain 完才触发,
|
|
131
|
+
// 保证 tee 把最后一批 chunk 写进 logFd 再关闭,不丢尾。
|
|
132
|
+
child.on('close', (code) => {
|
|
133
|
+
try {
|
|
134
|
+
fs.closeSync(logFd);
|
|
135
|
+
} catch {
|
|
136
|
+
/* already closed */
|
|
137
|
+
}
|
|
138
|
+
process.exit(code ?? 0);
|
|
139
|
+
});
|
|
81
140
|
child.on('error', (err) => {
|
|
82
|
-
console.error(err);
|
|
141
|
+
console.error('[dev-local] 启动失败:', err.message);
|
|
83
142
|
process.exit(1);
|
|
84
143
|
});
|
|
@@ -6,6 +6,10 @@ const { spawnSync } = require('node:child_process');
|
|
|
6
6
|
|
|
7
7
|
const SEP = ' ' + '─'.repeat(36);
|
|
8
8
|
|
|
9
|
+
// package-lock.json 锁内网镜像源 → 线上构建无法访问,改用公共镜像源。
|
|
10
|
+
// 后续如有其它内网域名需要拦截,在这里加 pattern 即可。
|
|
11
|
+
const INTERNAL_REGISTRY_PATTERNS = [/bnpm\.byted\.org/];
|
|
12
|
+
|
|
9
13
|
function failAndExit(step, body) {
|
|
10
14
|
process.stderr.write('\n✗ pre-commit failed: ' + step + '\n');
|
|
11
15
|
process.stderr.write(SEP + '\n');
|
|
@@ -17,6 +21,37 @@ function failAndExit(step, body) {
|
|
|
17
21
|
process.exit(1);
|
|
18
22
|
}
|
|
19
23
|
|
|
24
|
+
function checkLockfileRegistry() {
|
|
25
|
+
const res = spawnSync(
|
|
26
|
+
'git',
|
|
27
|
+
['diff', '--cached', '--diff-filter=ACMR', '--', 'package-lock.json'],
|
|
28
|
+
{ stdio: ['ignore', 'pipe', 'pipe'], env: process.env },
|
|
29
|
+
);
|
|
30
|
+
// git 不可用 / 不在 git 仓库 → 静默放行,交给 lint 步骤报错
|
|
31
|
+
if (res.error || res.status !== 0) return;
|
|
32
|
+
const diff = res.stdout ? res.stdout.toString() : '';
|
|
33
|
+
// 只看本次新增行(`+` 开头但排除 `+++` 文件头)
|
|
34
|
+
const hit = diff
|
|
35
|
+
.split('\n')
|
|
36
|
+
.some(
|
|
37
|
+
(line) =>
|
|
38
|
+
line.startsWith('+') &&
|
|
39
|
+
!line.startsWith('+++') &&
|
|
40
|
+
INTERNAL_REGISTRY_PATTERNS.some((p) => p.test(line)),
|
|
41
|
+
);
|
|
42
|
+
if (!hit) return;
|
|
43
|
+
failAndExit(
|
|
44
|
+
'package-lock.json 使用了内网镜像源',
|
|
45
|
+
[
|
|
46
|
+
'线上构建环境无法访问内网镜像源,将导致部署阶段 npm install 失败。',
|
|
47
|
+
'请使用公共镜像源重新生成 lockfile:',
|
|
48
|
+
'',
|
|
49
|
+
' rm -rf node_modules package-lock.json',
|
|
50
|
+
' npm install --registry=https://registry.npmmirror.com',
|
|
51
|
+
].join('\n'),
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
20
55
|
function runLint() {
|
|
21
56
|
const cwd = process.cwd();
|
|
22
57
|
const res = spawnSync('npm', ['run', 'lint'], {
|
|
@@ -34,4 +69,5 @@ function runLint() {
|
|
|
34
69
|
}
|
|
35
70
|
}
|
|
36
71
|
|
|
72
|
+
checkLockfileRegistry();
|
|
37
73
|
runLint();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
run = ["npm", "run", "dev"] # 默认 spark-cli dev
|
|
2
|
-
hidden = [".config", ".git", "scripts", "node_modules", "dist", ".spark", ".agent", ".agents", "tmp", ".spark_project", ".playwright-cli"]
|
|
2
|
+
hidden = [".config", ".git", "scripts", "node_modules", "dist", ".spark", ".agent", ".agents", ".claude", "tmp", ".spark_project", ".playwright-cli"]
|
|
3
3
|
lint = ["npm", "run", "lint"]
|
|
4
4
|
test = ["npm", "run", "test"]
|
|
5
5
|
genDbSchema = ["npm", "run", "gen:db-schema"]
|
|
@@ -13,4 +13,4 @@ run = ["npm", "run", "start"]
|
|
|
13
13
|
[files.restrict]
|
|
14
14
|
pathPatterns = ["client/src/api/gen", "package.json", ".spark_project", ".gitignore"]
|
|
15
15
|
[files.hidden]
|
|
16
|
-
pathPatterns = [".config", ".git", "scripts", "node_modules", "dist", ".spark", ".agent", ".agents", "tmp", ".spark_project", ".playwright-cli"]
|
|
16
|
+
pathPatterns = [".config", ".git", "scripts", "node_modules", "dist", ".spark", ".agent", ".agents", ".claude", "tmp", ".spark_project", ".playwright-cli"]
|
|
@@ -5,9 +5,12 @@
|
|
|
5
5
|
//
|
|
6
6
|
// 流程:
|
|
7
7
|
// 1. env pull —— 拉沙箱身份/凭证到 .env.local
|
|
8
|
-
// 2.
|
|
9
|
-
// 3.
|
|
10
|
-
// 4.
|
|
8
|
+
// 2. action-plugin init —— 装 user app 在 package.json.actionPlugins 里声明的插件
|
|
9
|
+
// 3. skills sync —— 同步当前 stack 的 agent skills
|
|
10
|
+
// 4. dotenv 加载 .env / .env.local 到 process.env(含 SUDA_WEBUSER 适配)
|
|
11
|
+
// 5. concurrently 并发起 dev:server + dev:client,整体 stdout/stderr tee 到
|
|
12
|
+
// logs/dev.std.log;server / client 输出靠 concurrently 自带 [server]/[client]
|
|
13
|
+
// 前缀区分,`grep '\[server\]' logs/dev.std.log` 拿单边日志
|
|
11
14
|
//
|
|
12
15
|
// 关键设计:本脚本在 spawn 子进程之前先把 .env / .env.local 加载到 process.env,
|
|
13
16
|
// 然后 spawn 的 server / client 进程通过 env 继承直接拿到——SDK(fullstack-nestjs-core
|
|
@@ -33,8 +36,12 @@ function warn(msg) {
|
|
|
33
36
|
if (!process.env.MIAODA_APP_TYPE) process.env.MIAODA_APP_TYPE = '3';
|
|
34
37
|
process.env.MIAODA_LOCAL_DEV = '1';
|
|
35
38
|
|
|
39
|
+
// 先建 logs/,防止任何步骤(尤其是 spawn 子进程前的 shell redirect)因父目录不存在挂掉
|
|
40
|
+
const LOG_DIR = process.env.LOG_DIR || 'logs';
|
|
41
|
+
fs.mkdirSync(LOG_DIR, { recursive: true });
|
|
42
|
+
|
|
36
43
|
// 1. env pull
|
|
37
|
-
console.log('[dev-local] (1/
|
|
44
|
+
console.log('[dev-local] (1/5) env pull...');
|
|
38
45
|
const hasLarkCli = spawnSync('command', ['-v', 'lark-cli'], { shell: true, stdio: 'ignore' }).status === 0;
|
|
39
46
|
if (hasLarkCli) {
|
|
40
47
|
let appId = '';
|
|
@@ -55,20 +62,28 @@ if (hasLarkCli) {
|
|
|
55
62
|
warn('lark-cli 未安装,跳过 env pull;请确保 .env.local 已就绪');
|
|
56
63
|
}
|
|
57
64
|
|
|
58
|
-
// 2.
|
|
65
|
+
// 2. action-plugin init —— 装 user app 在 package.json.actionPlugins 里声明的插件。
|
|
66
|
+
console.log('[dev-local] (2/5) action-plugin init...');
|
|
67
|
+
try {
|
|
68
|
+
execSync('npx -y @lark-apaas/fullstack-cli@latest action-plugin init', { stdio: 'inherit' });
|
|
69
|
+
} catch {
|
|
70
|
+
warn('action-plugin init 失败,继续启动');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// 3. skills sync —— --local 切到 flat layout (.agents/skills + .claude/skills 软链),
|
|
59
74
|
// 跟沙箱 nested layout 区分。不传 --version,handler 默认拉 coding-steering@latest,
|
|
60
75
|
// 保证每次本地 npm run dev 都把 skills 升到最新。
|
|
61
|
-
console.log('[dev-local] (
|
|
76
|
+
console.log('[dev-local] (3/5) miaoda skills sync...');
|
|
62
77
|
try {
|
|
63
78
|
execSync('npx -y @lark-apaas/miaoda-cli@latest skills sync --local', { stdio: 'inherit' });
|
|
64
79
|
} catch {
|
|
65
80
|
console.log(' (skills sync 失败,继续启动)');
|
|
66
81
|
}
|
|
67
82
|
|
|
68
|
-
//
|
|
83
|
+
// 4. 加载 .env / .env.local 到 process.env
|
|
69
84
|
// dotenv 默认 override:false,先到先得 → 先 .env.local 让它优先于 .env;
|
|
70
85
|
// shell env 已在 process.env,两次 config 都不会覆盖。
|
|
71
|
-
console.log('[dev-local] (
|
|
86
|
+
console.log('[dev-local] (4/5) loading .env / .env.local...');
|
|
72
87
|
const dotenv = require('dotenv');
|
|
73
88
|
dotenv.config({ path: '.env.local' });
|
|
74
89
|
dotenv.config({ path: '.env' });
|
|
@@ -89,8 +104,12 @@ if (process.env.SUDA_WEBUSER) {
|
|
|
89
104
|
}
|
|
90
105
|
}
|
|
91
106
|
|
|
92
|
-
//
|
|
93
|
-
|
|
107
|
+
// 5. 并发起前后端 dev server,整体 tee 到 logs/dev.std.log
|
|
108
|
+
const devLogPath = path.join(LOG_DIR, 'dev.std.log');
|
|
109
|
+
console.log('[dev-local] (5/5) 并发起 dev:server + dev:client');
|
|
110
|
+
console.log(`[dev-local] 日志: ${devLogPath}`);
|
|
111
|
+
|
|
112
|
+
const logFd = fs.openSync(devLogPath, 'a');
|
|
94
113
|
const child = spawn(
|
|
95
114
|
'npx',
|
|
96
115
|
[
|
|
@@ -104,10 +123,49 @@ const child = spawn(
|
|
|
104
123
|
'npm run dev:server',
|
|
105
124
|
'npm run dev:client',
|
|
106
125
|
],
|
|
107
|
-
{ stdio: '
|
|
126
|
+
{ stdio: ['ignore', 'pipe', 'pipe'], env: process.env },
|
|
108
127
|
);
|
|
109
|
-
|
|
128
|
+
|
|
129
|
+
const tee = (src) =>
|
|
130
|
+
src.on('data', (chunk) => {
|
|
131
|
+
try {
|
|
132
|
+
process.stdout.write(chunk);
|
|
133
|
+
} catch {
|
|
134
|
+
/* terminal gone */
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
fs.writeSync(logFd, chunk);
|
|
138
|
+
} catch {
|
|
139
|
+
/* log fd closed */
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
tee(child.stdout);
|
|
143
|
+
tee(child.stderr);
|
|
144
|
+
|
|
145
|
+
// 外部 SIGTERM/SIGHUP 转发给 concurrently,避免本进程死了 server/client 变孤儿
|
|
146
|
+
// (SIGINT 在 TTY 下 shell 直接发给整个前台进程组,不需要转发)
|
|
147
|
+
const forward = (sig) => () => {
|
|
148
|
+
try {
|
|
149
|
+
child.kill(sig);
|
|
150
|
+
} catch {
|
|
151
|
+
/* already gone */
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
process.on('SIGTERM', forward('SIGTERM'));
|
|
155
|
+
process.on('SIGHUP', forward('SIGHUP'));
|
|
156
|
+
|
|
157
|
+
// 'close' 而非 'exit':等 child 的 stdio stream drain 完才触发,
|
|
158
|
+
// 保证 tee 把最后一批 chunk 写进 logFd 再关闭,不丢尾。
|
|
159
|
+
child.on('close', (code) => {
|
|
160
|
+
try {
|
|
161
|
+
fs.closeSync(logFd);
|
|
162
|
+
} catch {
|
|
163
|
+
/* already closed */
|
|
164
|
+
}
|
|
165
|
+
process.exit(code ?? 0);
|
|
166
|
+
});
|
|
110
167
|
child.on('error', (err) => {
|
|
111
|
-
console.error(err);
|
|
168
|
+
console.error('[dev-local] 启动失败:', err.message);
|
|
169
|
+
console.error('[dev-local] 如缺 concurrently,运行: npm install');
|
|
112
170
|
process.exit(1);
|
|
113
171
|
});
|
|
@@ -6,6 +6,10 @@ const { spawnSync } = require('node:child_process');
|
|
|
6
6
|
|
|
7
7
|
const SEP = ' ' + '─'.repeat(36);
|
|
8
8
|
|
|
9
|
+
// package-lock.json 锁内网镜像源 → 线上构建无法访问,改用公共镜像源。
|
|
10
|
+
// 后续如有其它内网域名需要拦截,在这里加 pattern 即可。
|
|
11
|
+
const INTERNAL_REGISTRY_PATTERNS = [/bnpm\.byted\.org/];
|
|
12
|
+
|
|
9
13
|
function failAndExit(step, body) {
|
|
10
14
|
process.stderr.write('\n✗ pre-commit failed: ' + step + '\n');
|
|
11
15
|
process.stderr.write(SEP + '\n');
|
|
@@ -17,6 +21,37 @@ function failAndExit(step, body) {
|
|
|
17
21
|
process.exit(1);
|
|
18
22
|
}
|
|
19
23
|
|
|
24
|
+
function checkLockfileRegistry() {
|
|
25
|
+
const res = spawnSync(
|
|
26
|
+
'git',
|
|
27
|
+
['diff', '--cached', '--diff-filter=ACMR', '--', 'package-lock.json'],
|
|
28
|
+
{ stdio: ['ignore', 'pipe', 'pipe'], env: process.env },
|
|
29
|
+
);
|
|
30
|
+
// git 不可用 / 不在 git 仓库 → 静默放行,交给 lint 步骤报错
|
|
31
|
+
if (res.error || res.status !== 0) return;
|
|
32
|
+
const diff = res.stdout ? res.stdout.toString() : '';
|
|
33
|
+
// 只看本次新增行(`+` 开头但排除 `+++` 文件头)
|
|
34
|
+
const hit = diff
|
|
35
|
+
.split('\n')
|
|
36
|
+
.some(
|
|
37
|
+
(line) =>
|
|
38
|
+
line.startsWith('+') &&
|
|
39
|
+
!line.startsWith('+++') &&
|
|
40
|
+
INTERNAL_REGISTRY_PATTERNS.some((p) => p.test(line)),
|
|
41
|
+
);
|
|
42
|
+
if (!hit) return;
|
|
43
|
+
failAndExit(
|
|
44
|
+
'package-lock.json 使用了内网镜像源',
|
|
45
|
+
[
|
|
46
|
+
'线上构建环境无法访问内网镜像源,将导致部署阶段 npm install 失败。',
|
|
47
|
+
'请使用公共镜像源重新生成 lockfile:',
|
|
48
|
+
'',
|
|
49
|
+
' rm -rf node_modules package-lock.json',
|
|
50
|
+
' npm install --registry=https://registry.npmmirror.com',
|
|
51
|
+
].join('\n'),
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
20
55
|
function runLint() {
|
|
21
56
|
const cwd = process.cwd();
|
|
22
57
|
const res = spawnSync('npm', ['run', 'lint'], {
|
|
@@ -34,4 +69,5 @@ function runLint() {
|
|
|
34
69
|
}
|
|
35
70
|
}
|
|
36
71
|
|
|
72
|
+
checkLockfileRegistry();
|
|
37
73
|
runLint();
|