@mypaas/mp-cli
Advanced tools
Comparing version 1.0.8 to 1.0.9
const path = require('path') | ||
const fes = require('fs-extra') | ||
const fse = require('fs-extra') | ||
const chalk = require('chalk') | ||
@@ -7,3 +7,3 @@ const inquirer = require('inquirer') | ||
const downloadComponent = require('../utils/download-component') | ||
const { overwriteOption, selectPathOption } = require('../utils/inquirer-options') | ||
const { componentModeOption, overwriteOption, selectPathOption } = require('../utils/inquirer-options') | ||
@@ -35,6 +35,9 @@ module.exports = async (componentName) => { | ||
const targetPackage = path.resolve(process.cwd(), realPackagePath) | ||
const editorDir = path.join(targetPackage, 'editors', componentName) | ||
const runtimeDir = path.join(targetPackage, 'packages', componentName) | ||
const editorRoot = path.join(targetPackage, 'editors') | ||
const runtimeRoot = path.join(targetPackage, 'packages') | ||
const editorDir = path.join(editorRoot, componentName) | ||
const runtimeDir = path.join(runtimeRoot, componentName) | ||
let mode = 1 | ||
const isExist = fes.existsSync(editorDir) || fes.existsSync(runtimeDir) | ||
const isExist = fse.existsSync(editorDir) || fse.existsSync(runtimeDir) | ||
if (isExist) { | ||
@@ -46,9 +49,24 @@ const { action } = await inquirer.prompt([overwriteOption(componentName)]) | ||
if (action === 'overwrite') { | ||
fes.removeSync(editorDir) | ||
fes.removeSync(runtimeDir) | ||
fse.removeSync(editorDir) | ||
fse.removeSync(runtimeDir) | ||
} | ||
} | ||
await downloadComponent(targetPackage, componentName) | ||
if (fse.existsSync(editorRoot) && fse.existsSync(runtimeRoot)) { | ||
mode = 1 | ||
} else { | ||
const components = fse.readdirSync(targetPackage).filter(dir => fse.lstatSync(path.join(targetPackage, dir)).isDirectory()) | ||
// 有组件 mode = 2 | ||
if (components && components.length > 0) { | ||
mode = 2 | ||
} else { | ||
// 空组件包,需确定组件结构模式 | ||
const { selectMode } = await inquirer.prompt([componentModeOption()]) | ||
mode = selectMode | ||
} | ||
} | ||
await downloadComponent(targetPackage, componentName, mode) | ||
console.log() | ||
@@ -55,0 +73,0 @@ console.log(`组件包${chalk.cyan(realPackagePath)} 创建组件 ${chalk.cyan(componentName)} 成功.`) |
@@ -6,3 +6,5 @@ const path = require('path') | ||
const chalk = require('chalk') | ||
const fetch = require('node-fetch') | ||
const { dependencies } = require('../utils/const') | ||
const { validateName, getResourceByEngineVersion } = require('../utils/helper') | ||
@@ -12,5 +14,4 @@ const downloadTemplate = require('../utils/download-template') | ||
const downloadComponent = require('../utils/download-component') | ||
const allResourceVersion = require('../utils/resource-version') | ||
const { overwriteOption, packageManagerOption, projectOption, projectNameOption, engineVersionOption } = require('../utils/inquirer-options') | ||
const { overwriteOption, packageManagerOption, projectOption, projectNameOption, engineVersionOption, componentModeOption } = require('../utils/inquirer-options') | ||
@@ -20,3 +21,4 @@ | ||
const initResoursesVersion = async (newProject, engineVersion, projectName) => { | ||
const initResourcesVersion = async (newProject, engineVersion, projectName) => { | ||
const allResourceVersion = await fetch(dependencies).then(res => res.json()) | ||
const emulatorVersion = getResourceByEngineVersion(allResourceVersion['emulator'], engineVersion) | ||
@@ -66,17 +68,15 @@ const pageLayoutVersion = getResourceByEngineVersion(allResourceVersion['page-layout'], engineVersion) | ||
// 引擎版本圈定并写入 package.json | ||
const { engineVersion } = await inquirer.prompt([engineVersionOption]) | ||
const allResourceVersion = await fetch(dependencies).then(res => res.json()) | ||
const { engineVersion } = await inquirer.prompt([engineVersionOption(allResourceVersion)]) | ||
// 下载依赖资源(模板等) | ||
const { packageManager } = await inquirer.prompt([packageManagerOption]) | ||
const { selectMode } = await inquirer.prompt([componentModeOption()]) | ||
await downloadTemplate(targetDir, defaultTargetPackage) | ||
const targetPackage = path.join(targetDir, defaultTargetPackage[0]) | ||
await downloadComponent(targetPackage, 'demo') | ||
await downloadComponent(targetPackage, 'demo', selectMode) | ||
await initResourcesVersion(newProject, engineVersion, name) | ||
console.log(`npm config set @mypaas:registry ${privateRegistry}`) | ||
execSync(`npm config set @mypaas:registry ${privateRegistry}`) | ||
initResoursesVersion(newProject, engineVersion, name) | ||
if (!packageManager) { | ||
@@ -98,3 +98,4 @@ console.log('Success init Project.') | ||
// 引擎版本圈定并写入 package.json | ||
const { engineVersion } = await inquirer.prompt([engineVersionOption]) | ||
const allResourceVersion = await fetch(dependencies).then(res => res.json()) | ||
const { engineVersion } = await inquirer.prompt([engineVersionOption(allResourceVersion)]) | ||
@@ -106,7 +107,4 @@ const defaultTargetPackage = [] | ||
console.log(`npm config set @mypaas:registry ${privateRegistry}`) | ||
execSync(`npm config set @mypaas:registry ${privateRegistry}`) | ||
await initResourcesVersion(newProject, engineVersion) | ||
initResoursesVersion(newProject, engineVersion) | ||
if (!packageManager) { | ||
@@ -113,0 +111,0 @@ console.log('Success init Project.') |
{ | ||
"name": "@mypaas/mp-cli", | ||
"version": "1.0.8", | ||
"version": "1.0.9", | ||
"description": "devtools", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -6,2 +6,3 @@ const path = require('path') | ||
exports.componentUrl = 'https://mp-resource-internal.oss-cn-hangzhou.aliyuncs.com/local/cli-template/p-component.tar.gz' | ||
exports.dependencies = 'https://mp-resource-internal.oss-cn-hangzhou.aliyuncs.com/local/cli-template/dependencies.json' | ||
@@ -8,0 +9,0 @@ let homeDir = process.env[process.platform === 'win32' ? 'USERPROFILE' : 'HOME'] |
@@ -17,3 +17,3 @@ const path = require('path') | ||
let spinner = {} | ||
module.exports = async (targetPackage, componentName) => { | ||
module.exports = async (targetPackage, componentName, mode = 1) => { | ||
try { | ||
@@ -31,4 +31,12 @@ const packagePath = path.join(targetPackage, 'package.json') | ||
} | ||
const editorDir = path.join(targetPackage, 'editors', componentName) | ||
const runtimeDir = path.join(targetPackage, 'packages', componentName) | ||
let editorDir, runtimeDir | ||
if (mode === 1) { | ||
editorDir = path.join(targetPackage, 'editors', componentName) | ||
runtimeDir = path.join(targetPackage, 'packages', componentName) | ||
} else { | ||
editorDir = path.join(targetPackage, componentName, 'editor') | ||
runtimeDir = path.join(targetPackage, componentName, 'package') | ||
} | ||
// 下载模版资源 | ||
@@ -52,6 +60,10 @@ spinner = spin('downloading', 'component-template') | ||
const context = { ComponentName: upperCase(componentName) } | ||
const context = { ComponentName: componentName.replace(/-+/ig, ',').split(',').map(word => upperCase(word)).join('') } | ||
fs.copyTpl(path.join(sourcePath, 'editors/src/index.tsx'), path.join(editorDir, 'src/index.tsx'), context) | ||
fs.copyTpl(path.join(sourcePath, 'packages/src/index.tsx'), path.join(runtimeDir, 'src/index.tsx'), context) | ||
fs.copyTpl(path.join(sourcePath, 'packages/meta.json'), path.join(runtimeDir, 'meta.json'), context) | ||
fs.copyTpl(path.join(sourcePath, 'packages/meta.json'), path.join(runtimeDir, 'meta.json'), { ComponentName: componentName }) | ||
// 如果是模式2,则移动 meta 文件到组件的根目录 | ||
if (mode === 2) { | ||
fes.move(path.join(runtimeDir, 'meta.json'), path.join(runtimeDir, '../', 'meta.json')) | ||
} | ||
fs.commit(() => { | ||
@@ -58,0 +70,0 @@ fes.remove(sourcePath) |
@@ -30,13 +30,29 @@ const path = require('path') | ||
const packageJsonPath = path.join(targetDir, 'package.json') | ||
const isExist = fes.existsSync(packageJsonPath) | ||
if (isExist && !newProject) { | ||
const meta = fes.readJSONSync(packageJsonPath) | ||
const sourcePackage = fes.readJSONSync(path.join(sourcePath, 'package.json')) | ||
meta.scripts= Object.assign({}, meta.scripts, { 'dev:design': 'mp-cli start' }) | ||
meta.devDependencies= Object.assign({}, meta.devDependencies, sourcePackage.dependencies) | ||
meta.private = true | ||
meta.workspaces = meta.workspaces ? [...meta.workspaces, ...packagePath] : packagePath | ||
fes.writeJSONSync(packageJsonPath, meta, { spaces: 4 }) | ||
const npmrcPath = path.join(targetDir, '.npmrc') | ||
const packageJsonIsExist = fes.existsSync(packageJsonPath) | ||
const npmrcIsExist = fes.existsSync(npmrcPath) | ||
if (newProject){ | ||
fes.copySync(sourcePath, `${targetDir}`) | ||
} else { | ||
fes.copySync(sourcePath, `${targetDir}`) | ||
if (packageJsonIsExist) { | ||
const meta = fes.readJSONSync(packageJsonPath) | ||
const sourcePackage = fes.readJSONSync(path.join(sourcePath, 'package.json')) | ||
meta.scripts= Object.assign({}, meta.scripts, { 'dev:design': 'mp-cli start' }) | ||
meta.devDependencies= Object.assign({}, meta.devDependencies, sourcePackage.dependencies) | ||
meta.private = true | ||
meta.workspaces = meta.workspaces ? [...meta.workspaces, ...packagePath] : packagePath | ||
fes.writeJSONSync(packageJsonPath, meta, { spaces: 4 }) | ||
} | ||
if (npmrcIsExist) { | ||
fes.readFile(npmrcPath, 'utf8', (err, data) => { | ||
if (err) return console.error(err) | ||
if (data.indexOf('registry=https://nexus.mypaas.com.cn/repository/app-npm')===-1){ | ||
const fileData = `${data} | ||
registry=https://nexus.mypaas.com.cn/repository/app-npm` | ||
const bufferData = new Uint8Array(Buffer.from(fileData)); | ||
fes.writeFile(npmrcPath, bufferData) | ||
} | ||
}) | ||
} | ||
} | ||
@@ -43,0 +59,0 @@ |
@@ -6,3 +6,2 @@ const chalk = require('chalk') | ||
const validateProjectName = require('validate-npm-package-name') | ||
const allResourceVersion = require('./resource-version') | ||
@@ -9,0 +8,0 @@ const validateName = (name, type) => { |
const chalk = require('chalk') | ||
const resourceVersion = require('../utils/resource-version') | ||
module.exports = { | ||
componentModeOption: () => ({ | ||
name: 'selectMode', | ||
type: 'list', | ||
message: '请选择以哪种组件结构模式初始化', | ||
choices: [ | ||
{ name: 'packageName/packages/componentName、packageName/editors/componentName', value: 1 }, | ||
{ name: 'packageName/componentName/package、packageName/componentName/editor', value: 2 } | ||
] | ||
}), | ||
overwriteOption: (targetDir) => ({ | ||
@@ -97,11 +104,11 @@ name: 'action', | ||
}, | ||
engineVersionOption: { | ||
engineVersionOption: (resourceVersion) => ({ | ||
name: 'engineVersion', | ||
type: 'list', | ||
message: '请选择引擎版本', | ||
choices: resourceVersion['engine'].map(item => ({ | ||
name: `${item.version}${item.isRecommoned?'(推荐)':''}`, | ||
choices: (resourceVersion['engine'] || []).map(item => ({ | ||
name: `${item.version}${item.isRecommend?'(推荐)':''}`, | ||
value: item.version | ||
})) | ||
} | ||
}) | ||
} |
@@ -5,3 +5,3 @@ const resourceVersion = { | ||
version: '1.0.0', | ||
isRecommoned: true | ||
isRecommend: true | ||
} | ||
@@ -8,0 +8,0 @@ ], |
36526
870
6