UNPKG

wuqy-component

Version:

这是一个微信小程序自定义组件库

179 lines (163 loc) 7.15 kB
## 安装 ``` npm install wuqy-component ``` ## 使用前告知 - 现在的新版本都能使用了,之前的版本无法在微信小程序中构建,原因如下: > **作者已经解决 ,原因为,在使用ahk脚本自动保存文件时,versionUpdate函数中的FileAppend(content, filePath "\package.json", "UTF-8"),其中的"UTF-8"配置会导致编码格式变为UTF-8 with BOM utf8bom,而小程序中需要使用UTF-8,因此需要修正为FileAppend(content, filePath "\package.json","UTF-8-RAW")。** - 由于作者在不断调试和解决各种bug,带来了许多的不必要的版本,后续会删除一些旧版本,请大家谅解。 - 首先作者在此感谢大家的下载,让作者感受到自己的作品被大家关注也是一件快乐的事情,这也是作者后续大量更新的动力,希望我的作品能给大家带来帮助。 ## 其他人使用 - 安装成功后,点击顶部菜单栏的"工具",选择"构建npm",引入组件时使用绝对路径,例如:"x-title":"/miniprogram_npm/wuqy-component/customer/x-title"。其中出现的报错,是部分文件没有上传导致的,需要把相应的文件自行补充,或者是使用的导入语法为import,需要改为require能解决报错。欢迎大家下载,后续会大量的更新,同时期待大家的反馈,共同打造一个优秀的npm组件库。 ## 作者自己上传组件 - 如果有其他的组件想要发布到npm,可以按照以下步骤: - 1.把对应的组件文件复制到components文件夹中。 - 2.在package.json文件中修改版本信息,否则不能发布到npm,使用nrm工具切换npm源,`nrm use npm`切换到官方源。 - 3.在命令行中运行`npm login`执行登录操作,在登录成功后运行`npm publish`,发布组件到npm。 ### 注意: - "miniprogram": "components",此项配置决定了能否在小程序中构建成功,value是根目录。 ## 项目外兴趣研究 - 如何自动化上传组件到npm? ### 下面提供一段自动上传组件到npm的ahk脚本和bat脚本: - 实现了一键化操作 ```bat @echo off setlocal enabledelayedexpansion chcp 65001 >nul set REPO_DIR=%~dp0 @REM /d 表示切换盘符 cd /d "%REPO_DIR%" npm publish pause ``` ```js ;//请下载ahk:https://www.autohotkey.com/,ocr库在"components"文件夹下,函数介绍:只需复制需要上传的文件路径即可,其他的都会自动化执行,当然验证需要手动哦。 npmPublish(filePath := "C:\Users\86166\Desktop\npm组件上传",lowerDir := "\components\") { ;//更新文件 if !updateFile(filePath lowerDir) { result := MsgBox("您复制的文件路径不正确,是否继续更新", "提示", "4 48") if result != "Yes" { Tip1("更新已取消") return } } ;//自动更改版本号 versionUpdate(filePath) ;//打开文件夹,识别到publish.bat文件,并点击执行bat文件。 run(filePath, , "max") sleep(1000) if !ocrClick('PUBLISH', 10000,2) { ;//版本回滚 versionUpdate(filePath, true) return } Sleep(1000) if WinExist("ahk_exe WindowsTerminal.exe") WinMaximize("ahk_exe WindowsTerminal.exe") ;//终端中监听npm打包完成,识别到按enter键,并点击跳转到浏览器。 if !ocrClick('ENTER', 10000){ versionUpdate(filePath, true) return } ;//发送enter键 Send("{Enter}") ;//识别到用户验证 if !ocrClick('Use', 10000,2){ versionUpdate(filePath, true) return } ;//识别到验证成功 Sleep(2000) if !ocrClick('Successful', 10000) return ;//关闭文件资源管理器、cmd窗口(或powershell窗口)、谷歌浏览器。 if WinExist("ahk_exe chrome.exe") WinKill("ahk_exe chrome.exe") if WinExist("npm组件上传 - 文件资源管理器") WinKill("npm组件上传 - 文件资源管理器") if WinExist("ahk_exe WindowsTerminal.exe") WinActivate("ahk_exe WindowsTerminal.exe") } ;//OCR点击函数,对中文的支持不好,请使用英文。不过看了文档,需要通过powershell下载支持中文的ocr字体库。 ocrClick(text, time := 5000, count := 1) { ;count参数为点击次数。 if !IsSet(text) return result := OCR.WaitText(text, time, OCR.FromWindow.Bind(OCR, "A")) if result { if !coordinates := result.FindString(text) return false else { Y := coordinates.Y X := coordinates.X Click(X, Y, count) return true } } else return false } ;//版本更新 versionUpdate(filePath, rollBack := false) { static rollBackContent := "" if !rollBack { rollBackContent := content := FileRead(filePath "\package.json", "UTF-8") if RegExMatch(content, 'msU)"version":\s*".*\..*\.(\d*)",$', &version) content := StrReplace(content, version[0], StrReplace(version[0], version[1], Number(version[1] + 1))) FileDelete(filePath "\package.json") FileAppend(content, filePath "\package.json","UTF-8-RAW") } else { Tip1("上传失败,版本回滚") FileDelete(filePath "\package.json") FileAppend(rollBackContent, filePath "\package.json","UTF-8-RAW") if WinExist("ahk_exe chrome.exe") WinKill("ahk_exe chrome.exe") if WinExist("npm组件上传 - 文件资源管理器") WinKill("npm组件上传 - 文件资源管理器") if WinExist("ahk_exe WindowsTerminal.exe") WinKill("ahk_exe WindowsTerminal.exe") } } ;//更新文件 updateFile(Dir := "C:\Users\86166\Desktop\npm组件上传\components\") { if !fileInfo := outputFilePath() return false sourcePath := fileInfo.path targetPath := findFilePath(Dir, fileInfo.fileName) if !targetPath { DirCreate(Dir fileInfo.fileName) targetPath := Dir fileInfo.fileName } FileCopy(sourcePath, targetPath, 1) ;1表示覆盖。 ToolTip("操作成功") Sleep(1000) ToolTip() return true } ;//输出复制的文件路径 outputFilePath(findPath?) { filePath := IsSet(findPath) ? findPath : A_Clipboard SplitPath(filePath, &OutFileName, &OutDir, &OutExtension, &OutNameNoExt, &OutDrive) if OutDir !== "" && OutDrive !== "" { return { path: OutDir "\" OutFileName, fileName: OutFileName } } else { ToolTip("路径错误") Sleep(1000) ToolTip() return false } } ;//查找目标文件路径 findFilePath(currentDirectory := "C:\Users\86166\Desktop\npm组件上传\components\", needFindFileName := "charts") { findedPath := unset Loop Files, currentDirectory needFindFileName "\*.*", "R" { findedPath := A_LoopFileDir } if IsSet(findedPath) return findedPath else return false } ```