From 7e9e4b7ed81bbfaae8cf29cb0169eea4ae9d9e89 Mon Sep 17 00:00:00 2001 From: wxzhang Date: Sat, 28 Jan 2023 09:33:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dvoerkai18n=20init=E6=97=B6?= =?UTF-8?q?=E7=94=9F=E6=88=90Voerkai18nScope=E7=9A=84=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/cli/index.js | 4 +-- packages/cli/init.command.js | 46 ++++++++++++++++++++++++++-- packages/cli/templates/init-entry.js | 2 +- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/packages/cli/index.js b/packages/cli/index.js index 69a9079..61f3976 100644 --- a/packages/cli/index.js +++ b/packages/cli/index.js @@ -22,14 +22,12 @@ program banner.add("版本号:",`${require("./package.json").version}`,{style:["","yellow"]}) banner.render() }) - - program .command('init') .argument('[location]', t('工程项目所在目录')) .description(t('初始化项目国际化配置')) .option('-D, --debug', t('输出调试信息')) - .option('-m, --moduleType [types]', t('输出模块类型,取值auto,esm,cjs'), 'esm') + .option('-m, --moduleType [types]', t('输出模块类型,取值auto,esm,cjs'), 'auto') .option('-r, --reset', t('重新生成当前项目的语言配置')) .option('-lngs, --languages ', t('支持的语言列表'), ['zh','en']) .option('-d, --defaultLanguage ', t('默认语言'), 'zh') diff --git a/packages/cli/init.command.js b/packages/cli/init.command.js index 4bf7261..58e600f 100644 --- a/packages/cli/init.command.js +++ b/packages/cli/init.command.js @@ -9,7 +9,7 @@ const fs = require("fs") const { t } = require("./i18nProxy") const createLogger = require("logsets") const logger = createLogger() -const { installPackage } = require("@voerkai18n/utils") +const { installPackage,getCurrentPackageJson } = require("@voerkai18n/utils") const artTemplate = require("art-template") function getLanguageList(langs,defaultLanguage){ @@ -38,9 +38,51 @@ function getLanguageList(langs,defaultLanguage){ } } +/** + * 获取当前项目的模块类型 + * + * 1. .type="module" + * 2. 当前工程的index.(js|ts)是否包含了import xx from + * 3. 检查是否是typescript工程 + * + * + */ -module.exports = function(srcPath,{moduleType='cjs',isTypeScript,debug = true,languages=["zh","en"],defaultLanguage="zh",activeLanguage="zh",reset=false}={}){ +function getProjectModuleType(srcPath,isTypeScript){ + + // .type="module" + try{ + let packageJson = getCurrentPackageJson(srcPath) + if(packageJson.type=="module") return "esm" + }catch{} + + // 检查入口文件 + const importRegex = /import\s*.*\s*from\s*(["']).*\1/gm + const extryFiels = [ + path.join(srcPath,"index.js"), + path.join(srcPath,"src","index.js"), + path.join(srcPath,"main.js"), + path.join(srcPath,"src","main.js"), + ] + + for(let file of extryFiels){ + try{ + const source = fs.readFileSync(file) + if(importRegex.test(source)){ + return 'esm' + } + }catch{} + } + return isTypeScript ? 'esm' : 'cjs' +} + +module.exports = function(srcPath,{moduleType,isTypeScript,debug = true,languages=["zh","en"],defaultLanguage="zh",activeLanguage="zh",reset=false}={}){ let settings = {} + // 检查当前项目的模块类型 + if(!['esm',"cjs"].includes(moduleType)){ + moduleType = getProjectModuleType(srcPath) + } + let tasks = logger.tasklist("初始化VoerkaI18n工程") const langFolderName = "languages" // 查找当前项目的语言包类型路径 diff --git a/packages/cli/templates/init-entry.js b/packages/cli/templates/init-entry.js index a0bdac9..0a61076 100644 --- a/packages/cli/templates/init-entry.js +++ b/packages/cli/templates/init-entry.js @@ -8,7 +8,7 @@ import runtime from "@voerkai18n/runtime" const { translate,VoerkaI18nScope } = runtime {{else}} -const { translate,i18nScope } = require("@voerkai18n/runtime") +const { translate,VoerkaI18nScope } = require("@voerkai18n/runtime") {{/if}}