Hexo一键部署到阿里oss

通过oss的nodejs SDK配置上传静态文件到oss的js脚本,实现一键部署

Hexo一键部署到阿里oss

首先上脚本

感谢zhaohan提供的脚本(有点小问题,我自己修复了一下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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" ,就像下面这样
1
2
3
4
5
6
7
"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
1
2
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啦

个人博客 分享各种干货,高清壁纸等,欢迎来访~