Skip to content

本工具函数用于编写nodejs应用时使用,用来操作当前包工程。

getPackageRootPath

返回当前包工程所在的根路径。

typescript
function getPackageRootPath(entryPath:string="./",exclueCurrent:boolean=false):string | null
  • getPackageRootPath会从指定的extryPath开始向上查找package.json文件,如果没有找到则继续向上查找,直到找到package.json文件或者到达根目录为止。如果找到则返回package.json文件所在的路径,否则返回null
  • entryPath默认以当前路径为起点
  • exclueCurrent参数用来指定是否排除当前路径。默认为false,即包含当前路径。

getPackageJson

返回当前工程的package.json文件内容

typescript
function getPackageJson(entry?:string):PackageJson | undefined

getPackageTool

返回当前项目所使用的包管理工具。

typescript
function getPackageTool():('pnpm' | 'npm' | 'yarn')[]
  • getPackageTool通过检查当前工程根目录下是否存在pnpm-lock.yamlyarn.lock来判断当前工程所使用的包管理工具。

installPackage

安装指定的包。

typescript
interface installPackageOptions{
    location?:string                                // 安装位置
    silent?: boolean                                // 执行安装时静默输出
    type?: 'prod' | 'dev' | 'peer' | 'optional'     // 安装开发依赖 
    global?: boolean                                // 安装为全局依赖
    upgrade?: boolean                               // 当依赖已经安装时是否进行升级 
    use?:"auto" | string                            // 使用哪一个包工具
    ignoreError?:boolean                            // 忽略错误
}
async function installPackage(packageName:string,options?:installPackageOptions)
  • location:安装位置,默认为当前工程根目录下。location可以是任意的路径,安装时会向上查找package.json文件,然后进行安装
  • 如果安装成功则返回true,否则返回false
  • use默认使用pnpm

packageIsInstalled

查询某个包是否已经安装。

typescript

async function packageIsInstalled(packageName:string,checkGlobal:boolean=false):Promise<boolean>
  • checkGlobal参数用来指定是否在全局进行检查。

updatePackageJson

更新当前工程的package.json

typescript
interface UpdatePackageJsonOptions{
    location:string                 // 指定入口文件夹,如果不指定则使用当前工作目录
}
function updatePackageJson(data:Record<string,any>,options?:UpdatePackageJsonOptions)
  • location用来指定入口文件夹,如果不指定则使用当前工作目录。当没有指定时会以当前文件夹为起点查找package.json文件。如果有指定则会以指定的文件夹为起点查找package.json文件。

initPackage

初始化一个标准的nodejs包

typescript
export type DependencieType = 'dev' | 'prod' | 'peer' | 'optional'  | 'bundle'
export interface InitPackageOptions{
    location?:string                                        // 初始化位置路径
    src?:string                                             // 源文件路径,默认是当前目录
    // 是否使用typescript,true=使用默认配置,字符串=tsconfig.json文件内容,"file:tsconfig.json"=使用指定的tsconfig.json文件
    typescript?:boolean | string                           
    git?:boolean                                            // 是否初始化git              
    dependencies?:(string | [string,DependencieType])[]     // 依赖包, [包名,依赖类型]
    // 安装依赖前的回调函数
    onBeforeInstallDependent :(packageName:string,installType:DependencieType)=>void
    // 安装依赖后的回调函数
    onAfterInstallDependent:(error:null | Error,packageName:string,installType:DependencieType)=>void
    installTool?: "auto" | "npm" | "yarn" | "pnpm"          // 包安装工具
    files:(string | [string,string] | [string,string,Record<string,any>])[]                      // 需要复制的文件
    // 当复制文件后的回调函数
    onBeforeCopyFile:(src:string,desc:string)=>void
    onAfterCopyFile:(error:null | Error,src:string,desc:string)=>void
}

async function initPackage(packageNameOrInfo:string | PackageInfo,options?:InitPackageOptions)
  • packageNameOrInfo:包名或者包信息JSON对象
  • location:包的存放位置,默认为当前目录下
  • src:创建一个src源文件夹
  • typescript:是否使用typescript
    • 如果为true则使用tsc --init生成tsconfog.json;
    • 字符串:typescript=<tsconfog.json内容字符串>
    • 模板文件:typescript=file:<tsconfog.json模板文件路径>
  • git:是否初始化git
  • dependencies:安装依赖包
  • onBeforeInstallDependentonAfterInstallDependent:安装依赖包前后的回调函数,当需要显示安装进度时可以使用这两个回调函数。
  • onBeforeCopyFileonAfterCopyFile:复制文件前后的回调函数,当需要显示复制进度时可以使用这两个回调函数。
  • files:指定需要复制的文件,暂不支持通配符,也不支持文件夹。
    • files=["c:/temp/a.js"]表示复制a.js到目标文件夹下
    • files=[["c:/temp/a.js","src/"]]表示复制a.js到目标文件夹src
    • files=[["c:/temp/a.js","b.js"]]表示复制a.js到目标文件夹下的b.js文件
    • files=[["c:/temp/a.js","src/b.js"]]表示复制a.js到目标文件夹下的src/b.js文件
    • files=[["c:/temp/a.js","src/b.js",{x:1,y:2}]]表示读取a.js并对文件内容执行插值变量替换,然后复制到目标文件夹下的src/b.js文件.
  • 复制文件时允许对原始文件内容进行插值变量替换。方法是指定files=[["c:/temp/a.js","src/b.js",{x:1,y:2}]],然后在原始文件中使用表示变量。

示例:

typescript
const args = process.argv.slice(2)
    initPackage({
        name:args[0],
        version:"1.0.0",
    },{
        location:"c://temp//initpackages",
        dependencies:[
            "nanoid",
            ["lodash",'dev']
        ],
        files:[
            ['./index.ts','./src/index.ts'],
            'getPackageTool.ts'
        ],
        onBeforeInstallDependent(packageName,installType){
            console.log(`安装依赖包${packageName}(${installType})...`)
        },
        onAfterInstallDependent(error,packageName,installType){
            if(error){
                console.error(`安装依赖包${packageName}(${installType})失败,错误信息:${error.message}`)
            }else{
                console.log(`安装依赖包${packageName}(${installType})成功`)
            }
        },
        onBeforeCopyFile(src,desc){
            console.log(`复制文件${src}...`)
        },
        onAfterCopyFile(error,src,desc){
            if(error){
                console.error(`复制文件${src}失败,错误信息:${error.message}`)
            }else{
                console.log(`复制文件${src}成功`)
            }
        }
    })

getPackageEntry

读取包的入口文件,即main字段值

js

getPackageEntry() // 返回当前包入口main值
getPackageEntry({absolute:true}) // 返回绝对路径
// 指定一个入口文件夹,获取该入口所在的包的main值
getPackageEntry({entry:"/usr/app"})

isTypeScriptPackage

判断当前包是否是typescript

typescript
function isTypeScriptPackage(entry?:string):boolean

getPackageModuleType

获取当前包的类型

typescript
function getPackageModuleType(entry?:string):'esm' | 'cjs' | undefined

getPackageReleaseInfo

获取当前包的发布信息

typescript
type PackageReleaseInfo = {
    name         : string
    tags         : { [key:string]:string }
    license      : string
    author       : string
    version      : string
    latestVersion: string
    firstCreated : string
    lastPublish  : string
    size         : number
}

function getPackageReleaseInfo(packageName:string):Promise<PackageReleaseInfo>