From 5395f43597c30082c583a97837d2318a7f7a9c82 Mon Sep 17 00:00:00 2001 From: luckyadam Date: Wed, 26 Dec 2018 16:57:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(cli):=20=E4=BC=98=E5=8C=96=20npm=20?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E5=8C=85=E7=89=88=E6=9C=AC=E7=9A=84=E6=9F=A5?= =?UTF-8?q?=E6=89=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/taro-cli/src/util/index.js | 11 ++++++++++ packages/taro-cli/src/weapp.js | 33 ++++++++--------------------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/packages/taro-cli/src/util/index.js b/packages/taro-cli/src/util/index.js index 4af550315757..4b995e37ee4e 100644 --- a/packages/taro-cli/src/util/index.js +++ b/packages/taro-cli/src/util/index.js @@ -583,3 +583,14 @@ exports.UPDATE_PACKAGE_LIST = [ ] exports.pascalCase = (str) => str.charAt(0).toUpperCase() + _.camelCase(str.substr(1)) + +exports.getInstalledNpmPkgVersion = function (pkgName, basedir) { + const resolvePath = require('resolve') + try { + const pkg = resolvePath.sync(`${pkgName}/package.json`, { basedir }) + const pkgJson = fs.readJSONSync(pkg) + return pkgJson.version + } catch (err) { + return null + } +} diff --git a/packages/taro-cli/src/weapp.js b/packages/taro-cli/src/weapp.js index 2cfc4f4f8452..4230e4bfaa69 100644 --- a/packages/taro-cli/src/weapp.js +++ b/packages/taro-cli/src/weapp.js @@ -12,7 +12,6 @@ const template = require('babel-template') const autoprefixer = require('autoprefixer') const minimatch = require('minimatch') const _ = require('lodash') -const envinfo = require('envinfo') const postcss = require('postcss') const pxtransform = require('postcss-pxtransform') @@ -978,23 +977,16 @@ async function compileScriptFile (content, sourceFilePath, outputFilePath, adapt async function checkCliAndFrameworkVersion () { const frameworkName = `@tarojs/taro-${buildAdapter}` - let pkgInfo = await envinfo.run( - { - npmPackages: [frameworkName] - }, - { json: true, console: false, showNotFound: true } - ) - pkgInfo = JSON.parse(pkgInfo) - const frameworkVersionInfo = pkgInfo.npmPackages[frameworkName] - if (typeof frameworkVersionInfo === 'object' && frameworkVersionInfo.installed) { - if (frameworkVersionInfo.installed !== Util.getPkgVersion()) { + const frameworkVersion = Util.getInstalledNpmPkgVersion(frameworkName, nodeModulesPath) + if (frameworkVersion) { + if (frameworkVersion !== Util.getPkgVersion()) { Util.printLog(Util.pocessTypeEnum.ERROR, '版本问题', `Taro CLI 与本地安装的小程序框架 ${frameworkName} 版本不一致,请确保一致`) console.log(`Taro CLI: ${Util.getPkgVersion()}`) - console.log(`${frameworkName}: ${frameworkVersionInfo.installed}`) + console.log(`${frameworkName}: ${frameworkVersion}`) process.exit(1) } } else { - Util.printLog(Util.pocessTypeEnum.WARNING, '依赖安装', chalk.red(`项目依赖 ${frameworkName} 未安装!`)) + Util.printLog(Util.pocessTypeEnum.WARNING, '依赖安装', chalk.red(`项目依赖 ${frameworkName} 未安装,或安装有误!`)) } } @@ -1024,19 +1016,12 @@ async function buildFrameworkInfo () { if (buildAdapter === Util.BUILD_TYPES.SWAN) { const frameworkInfoFileName = '.frameworkinfo' const frameworkName = `@tarojs/taro-${buildAdapter}` - let pkgInfo = await envinfo.run( - { - npmPackages: [frameworkName] - }, - { json: true, console: false, showNotFound: true } - ) - pkgInfo = JSON.parse(pkgInfo) - const frameworkVersionInfo = pkgInfo.npmPackages[frameworkName] - if (typeof frameworkVersionInfo === 'object' && frameworkVersionInfo.installed) { + const frameworkVersion = Util.getInstalledNpmPkgVersion(frameworkName, nodeModulesPath) + if (frameworkVersion) { const frameworkinfo = { toolName: 'Taro', toolCliVersion: Util.getPkgVersion(), - toolFrameworkVersion: frameworkVersionInfo.installed, + toolFrameworkVersion: frameworkVersion, createTime: new Date(projectConfig.date).getTime() } fs.writeFileSync( @@ -1045,7 +1030,7 @@ async function buildFrameworkInfo () { ) Util.printLog(Util.pocessTypeEnum.GENERATE, '框架信息', `${outputDirName}/${frameworkInfoFileName}`) } else { - Util.printLog(Util.pocessTypeEnum.WARNING, '依赖安装', chalk.red(`项目依赖 ${frameworkName} 未安装!`)) + Util.printLog(Util.pocessTypeEnum.WARNING, '依赖安装', chalk.red(`项目依赖 ${frameworkName} 未安装,或安装有误!`)) } } }