@serpent/common-cli
Version:
通用的 cli 相关的函数
80 lines (76 loc) • 3.47 kB
JavaScript
;
var tslib_es6 = require('./tslib.es6-8ea38f41.cjs');
var path = require('path');
var context = require('./context-e98d804e.cjs');
var Dir = require('./Dir-a1286a2f.cjs');
require('module');
require('assert');
require('fs');
var TypedFileMap = {
'index.d.ts': { field: 'types', tpl: "export * from '<source>'" },
'cli.cjs': { field: 'bin', tpl: "require('<source>')" },
'cli.mjs': { field: 'bin', tpl: "import '<source>'" },
'index.cjs': { field: 'main', tpl: "Object.defineProperty(exports, '__esModule', { value: true });\nmodule.exports = require('<source>')" },
'index.mjs': { field: 'module', tpl: "export * from '<source>'" },
};
/**
* 在指定的目录上生成一个 node 模块,常用于在 durka/vendors 下面注入新模块
*/
function createPackage(nodeModulesDir, packageName, packageDetail, callback) {
var name = packageName;
var rootDir = path.join.apply(path, tslib_es6.__spreadArray([nodeModulesDir], name.split('/'), false));
var jsonPath = path.join(rootDir, 'package.json');
// 下面两个变量会动态更新
var fileMap = { 'package.json': jsonPath };
var jsonDetail = tslib_es6.__assign({ name: name, version: '1.0.0' }, packageDetail);
var write = function (fileName, content) {
var file = context.toOSPath(path.join(rootDir, fileName));
fileMap[fileName] = file;
Dir.writeFile(file, (Array.isArray(content) ? content.join('\n') : content) || '');
return true;
};
var writeTyped = function (file, options) {
var obj = TypedFileMap[file];
var content = options.content, source = options.source, exportDefault = options.exportDefault, prefix = options.prefix, suffix = options.suffix;
if (obj) {
jsonDetail[obj.field] = './' + file;
var tpl = obj.tpl;
if (!content && source) {
if (exportDefault && (file === 'index.mjs' || file === 'index.d.ts'))
tpl += "\nexport { default } from '<source>'";
content = tpl.replace(/<source>/g, source);
if (prefix)
content = prefix + '\n' + content;
if (suffix)
content = content + '\n' + suffix;
}
}
if (jsonDetail.module && !packageDetail.exports) {
var mod = { import: jsonDetail.module };
if (jsonDetail.types)
mod.types = jsonDetail.types;
if (jsonDetail.main)
mod.require = jsonDetail.main;
jsonDetail.exports = { '.': mod };
}
write(file, content || '');
};
callback({
rootDir: rootDir,
name: name,
jsonDetail: jsonDetail,
jsonPath: jsonPath,
fileMap: fileMap,
write: write,
setBinCJS: function (opts) { return writeTyped('cli.cjs', opts); },
setBinMJS: function (opts) { return writeTyped('cli.mjs', opts); },
setMainCJS: function (opts) { return writeTyped('index.cjs', opts); },
setMainMJS: function (opts) { return writeTyped('index.mjs', opts); },
setTypes: function (opts) { return writeTyped('index.d.ts', opts); },
});
Dir.writeFile(jsonPath, JSON.stringify(jsonDetail, null, 2));
return tslib_es6.__assign(tslib_es6.__assign({}, fileMap), { get bin() {
return fileMap['cli.cjs'] || fileMap['cli.mjs'];
} });
}
exports.createPackage = createPackage;