先附上项目效果:html
项目地址: http://47.105.144.204/indexnode
github:github.com/dsying/reac…react
cdn选用的是七牛CDNwebpack
yarn add qiniu
复制代码
七牛nodejs sdk 建立服务器端上传文件,将webpack打包生成的js文件 上传到 指定空间内git
// qiNiuConfig.js
module.exports = {
cdn: {
ak: '你的AccessKey',
sk: '你的SecretKey',
bucket: '你的空间名',
host: 'http://pn0tnrsa8.bkt.clouddn.com/', // 你的cdn域名
}
}
复制代码
const qiniu = require('qiniu')
const fs = require('fs')
const path = require('path')
// 上传静态资源所需的配置
const cdnConfig = require('./qiNiu.config').cdn
// 不须要上传的文件
const noNeedUploadFileList = ['index.html', 'server.ejs', 'server-entry.js']
const {
ak, sk, bucket,
} = cdnConfig
// 建立各类上传凭证以前,咱们须要定义好其中鉴权对象mac
const mac = new qiniu.auth.digest.Mac(ak, sk)
const doUpload = (key, file) => {
// 建立上传凭证token
const options = {
scope: bucket + ':' + key,
}
const putPolicy = new qiniu.rs.PutPolicy(options)
const uploadToken = putPolicy.uploadToken(mac)
// 服务端直传
/* * 七牛存储支持空间建立在不一样的机房, * 在使用七牛的 Node.js SDK 中的FormUploader和ResumeUploader上传文件以前, * 必需要构建一个上传用的config对象,在该对象中,能够指定空间对应的zone以及其余的一些影响上传的参数 * */
const config = new qiniu.conf.Config()
config.zone = qiniu.zone.Zone_z0 //z0表明 华东机房
const formUploader = new qiniu.form_up.FormUploader(config)
const putExtra = new qiniu.form_up.PutExtra()
return new Promise((resolve, reject) => {
formUploader.putFile(uploadToken, key, file, putExtra, (err, body, info) => {
if (err) {
return reject(err)
}
if (info.statusCode === 200) {
resolve(body)
} else {
reject(body)
}
})
})
}
// webpack打包后生成的 dist 目录下的文件
const files = fs.readdirSync(path.join(__dirname, '../dist'))
// 上传须要上传的文件至 七牛云 CDN
const uploads = files.map(file => {
if (noNeedUploadFileList.indexOf(file) === -1) {
return doUpload(
file,
path.join(__dirname, '../dist', file)
)
} else {
return Promise.resolve('no need upload file ' + file)
}
})
Promise.all(uploads).then(resps => {
console.log('upload success:', resps)
}).catch(errs => {
console.log('upload fail:', errs)
// process.exit(0)
})
复制代码
const cdnConfig = require('./qiNiu.config').cdn
// 让 打包生成的静态文件 前缀为 七牛CDN的域名
config.output.publicPath = cdnConfig.host
复制代码
该配置是为了让 index.html引入静态文件时直接访问cdn github
依次执行命令 npm run deploy/ npm run startweb
打开浏览器访问项目,此时静态资源所有访问的是 七牛cdn 上的资源 shell