Hexo一键部署到阿里oss
首先上脚本
感谢zhaohan提供的脚本(有点小问题,我自己修复了一下)
const fs = require('fs')
const path = require('path')
const util = require('util')
const OSS = require('ali-oss')
const promisifyReaddir = util.promisify(fs.readdir)
const promisifyStat = util.promisify(fs.stat)
// 阿里 OSS access key 拥有对 OSS 的全部权限
const ALIOSSKEY = {
key: '*****************',
secret: '*****************'
}
const client = new OSS({
// 请填写你的 Bucket 对应的 region
region: 'oss-cn-shanghai',
accessKeyId: ALIOSSKEY.key,
accessKeySecret: ALIOSSKEY.secret,
// 请填写对应的 Bucket 名字
bucket: 'MewBucket'
})
const publicPath = path.resolve(__dirname, './public')
async function run(proPath = '') {
const dir = await promisifyReaddir(`${publicPath}${proPath}`)
for (let i = 0; i < dir.length; i++) {
const stat = await promisifyStat(path.resolve(`${publicPath}${proPath}`, dir[i]))
if (stat.isFile()) {
const fileStream = fs.createReadStream(path.resolve(`${publicPath}${proPath}`, dir[i]))
console.log(`上传文件: ${proPath}/${dir[i]}`)
const result = await client.putStream(`${proPath}/${dir[i]}`, fileStream)
console.log(result)
} else if (stat.isDirectory()) {
await run(`${proPath}/${dir[i]}`)
}
}
}
run()
- 安装依赖 :
npm i ali-oss
- 新建该脚本放在你hexo项目的根目录下,和public同级
- 该脚本有四个参数需要自己的配置(在你的oss控制台查):access key,access secret,region,Bucket
- 然后修改根目录下的package.json文件
- 找到"scripts": { ··· }这一行
- 增加一个指令:
"doss": "node ./doss.js"
,就像下面这样
"scripts": {
"build": "hexo generate && node ./move404.js",
"clean": "hexo clean",
"doss": "node ./doss.js",
"deploy": "hexo deploy"
"server": "hexo server",
},
- 然后直接运行 npm doss 就能直接把public下所有文件上传到你的bucket啦
另外由于oss的404页面也只能设置根目录下的文件,而hexo自动生成的404页面在一个文件夹里,每次自己手动移动的话不免显的太麻烦了
所以当然也要配置成自动的
- 同理,根目录下新建一个脚本 move404.js
const fs = require('fs')
fs.writeFileSync('./public/404.html', fs.readFileSync('./public/404/index.html'));
- 同上,还是在package.json里添加一个指令(或者把原来的指令修改成这样):
"build": "hexo generate && node ./move404.js"
, - 运行npm build的时候也就自动的移动404.html啦
个人博客 mew.zone 分享各种干货,高清壁纸等,欢迎来访~