功能新增: - OSS 存储使用情况显示(文件页面) - OSS 当日流量统计(阿里云云监控API) - 分享页面路由修复(/s/xxx 格式支持) Bug修复: - 修复分享页面资源路径(相对路径改绝对路径) - 修复分享码获取逻辑(支持路径格式) - 修复OSS配额undefined显示问题 - 修复登录流程OSS配置检查 - 修复文件数为null时的显示问题 依赖更新: - 添加 @alicloud/cms20190101 云监控SDK - 添加 @alicloud/openapi-client Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
75 lines
1.9 KiB
JavaScript
75 lines
1.9 KiB
JavaScript
const path = require('path');
|
|
const utils = require('./utils');
|
|
const merge = utils.merge;
|
|
const bus = utils.bus;
|
|
const spawn = require('child_process').spawn;
|
|
|
|
module.exports = function spawnCommand(command, config, eventArgs) {
|
|
var stdio = ['pipe', 'pipe', 'pipe'];
|
|
|
|
if (config.options.stdout) {
|
|
stdio = ['pipe', process.stdout, process.stderr];
|
|
}
|
|
|
|
const env = merge(process.env, { FILENAME: eventArgs[0] });
|
|
|
|
var sh = 'sh';
|
|
var shFlag = '-c';
|
|
var spawnOptions = {
|
|
env: merge(config.options.execOptions.env, env),
|
|
stdio: stdio,
|
|
};
|
|
|
|
if (!Array.isArray(command)) {
|
|
command = [command];
|
|
}
|
|
|
|
if (utils.isWindows) {
|
|
// if the exec includes a forward slash, reverse it for windows compat
|
|
// but *only* apply to the first command, and none of the arguments.
|
|
// ref #1251 and #1236
|
|
command = command.map(executable => {
|
|
if (executable.indexOf('/') === -1) {
|
|
return executable;
|
|
}
|
|
|
|
return executable.split(' ').map((e, i) => {
|
|
if (i === 0) {
|
|
return path.normalize(e);
|
|
}
|
|
return e;
|
|
}).join(' ');
|
|
});
|
|
// taken from npm's cli: https://git.io/vNFD4
|
|
sh = process.env.comspec || 'cmd';
|
|
shFlag = '/d /s /c';
|
|
spawnOptions.windowsVerbatimArguments = true;
|
|
spawnOptions.windowsHide = true;
|
|
}
|
|
|
|
const args = command.join(' ');
|
|
const child = spawn(sh, [shFlag, args], spawnOptions);
|
|
|
|
if (config.required) {
|
|
var emit = {
|
|
stdout: function (data) {
|
|
bus.emit('stdout', data);
|
|
},
|
|
stderr: function (data) {
|
|
bus.emit('stderr', data);
|
|
},
|
|
};
|
|
|
|
// now work out what to bind to...
|
|
if (config.options.stdout) {
|
|
child.on('stdout', emit.stdout).on('stderr', emit.stderr);
|
|
} else {
|
|
child.stdout.on('data', emit.stdout);
|
|
child.stderr.on('data', emit.stderr);
|
|
|
|
bus.stdout = child.stdout;
|
|
bus.stderr = child.stderr;
|
|
}
|
|
}
|
|
};
|