Skip to content

Commit 1b8a237

Browse files
author
hongqi.gan
committed
feat: add project alias start
1 parent d76fc38 commit 1b8a237

File tree

3 files changed

+128
-1
lines changed

3 files changed

+128
-1
lines changed

lib/commands/pack.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ exports.setOptions = function (optimist) {
4343

4444
exports.run = function (options) {
4545
var start = function () {
46-
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
46+
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
4747
return _regenerator2.default.wrap(function _callee$(_context) {
4848
while (1) {
4949
switch (_context.prev = _context.next) {

lib/commands/server.js

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,29 @@ exports.run = function (options) {
165165
return next();
166166
});
167167

168+
// 在package.json中配置别名
169+
// 当按照别名访问的时候转到对应的Project的目录
170+
app.use(function (req, res, next) {
171+
var url = req.url;
172+
var st = Date.now();
173+
var projectList = getCurrentProjects();
174+
// 不论项目,发现别名直接替换为对应的baseName
175+
if (projectList && projectList.length) {
176+
projectList.forEach(function (project) {
177+
if (project.alias && project.alias.length) {
178+
project.alias.forEach(function (alias) {
179+
var aliasReg = new RegExp('^/' + alias + '$|^/' + alias + '/');
180+
if (aliasReg.test(req.url)) {
181+
req.url = req.url.replace(aliasReg, '/' + project.baseName + '/');
182+
// log(`alias rewrite: ${oldUrl} -> ${req.url}` );
183+
}
184+
});
185+
}
186+
});
187+
}
188+
next();
189+
});
190+
168191
// custom middlewares
169192
app.use(function (req, res, next) {
170193
try {
@@ -657,4 +680,46 @@ exports.run = function (options) {
657680
projectDir: projectDir
658681
};
659682
}
683+
684+
// 父目录启动的话,可能存在多个项目,是一个项目列表,获取每一个项目列表的信息
685+
function getCurrentProjects() {
686+
// 观察当前目录是否有ykit.js
687+
var cwd = process.cwd();
688+
689+
if (_isProject(cwd)) {
690+
// 项目根目录访问
691+
return [_getProjectAlias(cwd)];
692+
} else {
693+
// 父目录访问
694+
return fs.readdirSync(cwd).filter(function (fileName) {
695+
return (/^[\w-_]+$/.test(fileName)
696+
);
697+
}).map(function (fileName) {
698+
var pd = sysPath.join(cwd, fileName);
699+
return _getProjectAlias(pd);
700+
}).filter(function (alias) {
701+
return !!alias;
702+
});
703+
}
704+
}
705+
706+
function _getProjectAlias(projectBase) {
707+
if (_isProject(projectBase)) {
708+
var jsonstring = fs.readFileSync(sysPath.join(projectBase, 'package.json')).toString('utf8');
709+
var packageConfig = JSON.parse(jsonstring);
710+
711+
var alias = [];
712+
packageConfig.alias && alias.push(packageConfig.alias);
713+
packageConfig.hybridId && alias.push(packageConfig.hybridId);
714+
715+
return {
716+
baseName: sysPath.basename(projectBase),
717+
alias: alias
718+
};
719+
}
720+
}
721+
722+
function _isProject(projectPath) {
723+
return !!globby.sync(['ykit.*.js', 'ykit.js'], { cwd: projectPath }).length;
724+
}
660725
};

src/commands/server.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,29 @@ exports.run = (options) => {
147147
return next();
148148
});
149149

150+
// 在package.json中配置别名
151+
// 当按照别名访问的时候转到对应的Project的目录
152+
app.use((req, res, next) => {
153+
let url = req.url;
154+
var st = Date.now();
155+
var projectList = getCurrentProjects();
156+
// 不论项目,发现别名直接替换为对应的baseName
157+
if(projectList && projectList.length) {
158+
projectList.forEach(project => {
159+
if(project.alias && project.alias.length) {
160+
project.alias.forEach( alias => {
161+
var aliasReg = new RegExp(`\^/${alias}$|\^/${alias}/`);
162+
if(aliasReg.test(req.url)) {
163+
req.url = req.url.replace(aliasReg, `/${project.baseName}/`);
164+
// log(`alias rewrite: ${oldUrl} -> ${req.url}` );
165+
}
166+
});
167+
}
168+
});
169+
}
170+
next();
171+
});
172+
150173
// custom middlewares
151174
app.use(function (req, res, next) {
152175
try {
@@ -646,4 +669,43 @@ exports.run = (options) => {
646669
projectDir: projectDir
647670
};
648671
}
672+
673+
// 父目录启动的话,可能存在多个项目,是一个项目列表,获取每一个项目列表的信息
674+
function getCurrentProjects() {
675+
// 观察当前目录是否有ykit.js
676+
var cwd = process.cwd();
677+
678+
if(_isProject(cwd)) {// 项目根目录访问
679+
return [_getProjectAlias(cwd)];
680+
} else {// 父目录访问
681+
return fs.readdirSync(cwd).filter(fileName => {
682+
return /^[\w-_]+$/.test(fileName);
683+
}).map((fileName) => {
684+
var pd = sysPath.join(cwd, fileName);
685+
return _getProjectAlias(pd);
686+
}).filter((alias) => {
687+
return !!alias;
688+
});
689+
}
690+
}
691+
692+
function _getProjectAlias(projectBase) {
693+
if (_isProject(projectBase)) {
694+
var jsonstring = fs.readFileSync(sysPath.join(projectBase, 'package.json')).toString('utf8');
695+
var packageConfig = JSON.parse(jsonstring);
696+
697+
var alias = [];
698+
packageConfig.alias && (alias.push(packageConfig.alias));
699+
packageConfig.hybridId && (alias.push(packageConfig.hybridId));
700+
701+
return {
702+
baseName: sysPath.basename(projectBase),
703+
alias
704+
};
705+
}
706+
}
707+
708+
function _isProject(projectPath) {
709+
return !!globby.sync(['ykit.*.js', 'ykit.js'], { cwd: projectPath }).length;
710+
}
649711
};

0 commit comments

Comments
 (0)