wuqy-component
Version:
这是一个微信小程序自定义组件库
179 lines (163 loc) • 7.15 kB
Markdown
## 安装
```
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
}
```