mtl-js-sdk
Version:
ynf-fw-mtl-api
153 lines (139 loc) • 4.97 kB
JavaScript
// 更新mtl在cdn地址中版本
const fs = require("fs")
const axios = require("axios")
const formData = require("form-data")
const path = require("path")
const fileNames = ["mtl.min.bundle", "mtl.js.map", "module.xml"]
// 上传 mtl.min.js
function putMtl(path, requestPath) {
const files = fs.readdirSync(path)
files.forEach((item) => {
const sourcePath = `${path}/${item}`
const stat = fs.statSync(sourcePath)
if (stat.isDirectory()) {
putMtl(sourcePath, `${requestPath}/${item}/`)
} else {
if (!fileNames.includes(item) && !item.includes(".js.map") && !item.includes(".txt")) {
request(requestPath, fs.createReadStream(sourcePath))
}
}
})
}
// 上传
async function getHeaders(form) {
return new Promise((resolve, reject) => {
form.getLength((err, length) => {
if (err) reject(err)
const headers = Object.assign({ "Content-Length": length }, form.getHeaders())
resolve(headers)
})
})
}
async function request(path, file) {
let format = new formData()
format.append("AccessKey", AccessKey)
format.append("AccessSecret", AccessSecret)
format.append("filePath", path)
format.append("file", file)
const headers = await getHeaders(format)
axios({
url: "ht" + "tps://package.yonyou" + "cloud.com/npm/foreign/upload",
data: format,
method: "post",
headers,
}).then(function (res) {
console.log("upload-mp cdn success: ", res.data)
}).catch(function (err) {
console.log("upload-mp cdn err: ", err)
})
}
// 创建文件
function makeFiles(callback) {
try {
// 获取版本号
let data = fs.readFileSync("./package.json", "utf-8")
const version = JSON.parse(data).version
// 指定文件生成路径.
let mtlVersion = "../mtl版本/release"
const fileName = `${mtlVersion}/${version}`
// 判断文件夹是否存在
if (!fs.existsSync(fileName)) {
fs.mkdirSync(`${fileName}`, { recursive: true }) // 文件夹
}
// dist 产物 copy 到指定目录
const distPath = "./dist"
const files = fs.readdirSync(distPath)
files.forEach((item) => {
if (!fileNames.includes(item) && !item.includes(".js.map")) {
const subPath = `${distPath}/${item}`
const targetPath = `${fileName}/${item}`
const stat = fs.statSync(subPath)
if (stat.isDirectory(subPath)) {
if (!fs.existsSync(targetPath)) {
fs.mkdirSync(targetPath)
}
const subFiles = fs.readdirSync(subPath)
subFiles.forEach((subItem) => {
if (!subItem.includes(".js.map")) {
fs.copyFileSync(`${subPath}/${subItem}`, `${targetPath}/${subItem}`)
}
})
} else {
fs.copyFileSync(subPath, `${fileName}/${item}`)
}
}
})
fs.writeFileSync(
`${fileName}/mtlVersion.js`,
JSON.stringify({
version: version,
path: "ht" + "tps://design.yonyou" + "cloud.com/library/mtl/releasecdn/mtl.min.js",
})
)
callback({ version, path: fileName })
} catch (error) {
console.log("error message:", error)
}
}
const containPlatform = ["APIIos", "upesnAndroid", "upesnIos"]
/** 文件拷贝 */
function copyFolder(source, target) {
if (!fs.existsSync(target)) {
fs.mkdirSync(target)
}
const files = fs.readdirSync(source)
files.forEach((file) => {
const sourcePath = path.join(source, file)
let targetPath = path.join(target, file)
const stat = fs.statSync(sourcePath)
if (stat.isFile()) {
if (!sourcePath.includes(".map") && !sourcePath.includes("mtl.js")) {
targetPath = path.join(target, "mtl.min.bundle")
fs.copyFileSync(sourcePath, targetPath)
}
} else if (stat.isDirectory() && containPlatform.includes(file)) {
copyFolder(sourcePath, targetPath)
}
})
}
/**
* 需要添加AccessKey 和 AccessSecret。
* npm run cdn:upload:mp AccessKey=xxx AccessSecret=xxx
*/
//
const arguments = process.argv.splice(2)
let AccessKey = ""
let AccessSecret = ""
if (arguments && Array.isArray(arguments)) {
arguments.map((item) => {
if (item.includes("AccessKey")) {
AccessKey = item.replace("AccessKey=", "")
} else if (item.includes("AccessSecret")) {
AccessSecret = item.replace("AccessSecret=", "")
}
})
}
makeFiles(function (res) {
putMtl(res.path, `/mtl/${res.version}cdn/`)
putMtl(res.path, "/mtl/releasecdn/")
})