goldpankit
Version:
GoldPanKit是一款极速研发套件,可在套件中快速构建各类技术框架和项目。开源作者可发布自己的项目,并为其设定金额,实现开源项目的盈利。
55 lines (54 loc) • 1.94 kB
JavaScript
const root = process.cwd()
const open = require('opn')
const net = require('net')
const fs = require('./fs')
const Const = require('../constants/constants')
const cache = require('./cache')
const projectService = require('../project')
module.exports = {
open (port) {
const projectConfig = projectService.getProjectConfig(root)
// 查找是否存在配置文件,如果存在,则自动打开工作提啊
if (projectConfig != null) {
// 根据路径查找项目
const projects = cache.projects.getAll()
const targetProject = projects.find(p => p.codespace === root)
if (targetProject != null) {
open(`http://127.0.0.1:${port}/workbench?project_id=${targetProject.id}`)
return
}
// 根据路径在本地未找到项目,根据kit.json中的项目名称创建一个新项目
// 如果kit.json中没有项目名称配置,则根据项目的最后一个目录名称来创建项目
let projectName = projectConfig.name == null ? null : projectConfig.name.trim()
if (projectName == null) {
projectName = fs.getFilename(root)
}
projectService.create({
name: projectName,
codespace: root,
remark: ''
})
.then(projectId => {
open(`http://127.0.0.1:${port}/workbench?project_id=${projectId}`)
})
return
}
// 找不到配置文件或项目,则打开公共空间页面
open(`http://127.0.0.1:${port}`)
},
// 查询可用的端口号
findAvailablePort(port, callback) {
const server = net.createServer();
server.once('error', () => {
// 端口被占用,则尝试监听下一个端口
this.findAvailablePort(port + 1, callback);
});
server.once('listening', () => {
// 端口未被占用,则关闭服务器并返回端口号
server.close(() => {
callback(port);
});
});
server.listen(port);
}
}