npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@renxuetang/qiniu-upload

v0.1.0

Published

A simple library that helps to upload static resource file to qiniu bucket for cdn use.

Downloads

6

Readme

qiniu-upload

一个简单的工具,把静态资源发布到七牛的CDN空间。

因为想把vue项目的中的静态资源,通过vue-cli-service的命令发布到七牛的cdn,所以就先做这个工具。核心目标就是把一个文件夹内指定的文件集合,全部上传到七牛特定的某个存储空间,考虑到上传会有出错的情况,所以需要支持覆盖式上传,然后还要考虑对七牛相关的密钥进行保护处理;最后希望上传过程就是一个异步处理过程,在上传完毕时,能够看到一个整体的上传统计结果(成功多少个,失败多少个),以及失败的明细情况。

用法

  • 安装

    npm install @renxuetang/qiniu-upload --save-dev
  • 定义一个.qiniu配置文件

    accessKey=
    secretKey=
    bucket=

    这个文件用来在本地定义七牛的AK和SK,最好加入到.gitignore,避免这样的信息传递到代码仓库。

  • 编写上传任务

    编写一个upload.js

    const Uploader = require('@renxuetang/qiniu-upload')
    
    new Uploader({
        envFile: '.qiniu', //定义ak sk的本地配置文件名
        base: 'dist', // 定义上传的基准目录
        output: 'qiniu-upload.json', // 定义上传结束后导出上传明细的文件名
        glob: 'dist/**', // 定义要上传的文件集,glob格式
        globIgnore: [
            'dist/!(static)/**'
        ], // 定义哪些文件不上传,glob格式
        bucket: 'static', // 定义要上传到的七牛空间名
        overrides: false, // 是否覆盖
        parallelCount: 2, // 并行上传任务数
        zone: Uploader.zone.z0 // 定义七牛的zone,每个空间都属于不同的zone,需要提前指定这个
    }).start()

    然后运行:

    node upload

    最后就会在控制台看到上传的进度和上传的结果:

    [@renxuetang/qiniu-upload] config:
    [@renxuetang/qiniu-upload]       cwd: D:\code\@renxuetang/qiniu-upload
    [@renxuetang/qiniu-upload]       envFile: .qiniu
    [@renxuetang/qiniu-upload]       base: dist
    [@renxuetang/qiniu-upload]       output: qiniu-upload.json
    [@renxuetang/qiniu-upload]       bucket: static
    [@renxuetang/qiniu-upload]       overrides: false
    [@renxuetang/qiniu-upload] total files: 5, uploading:0, success:5, fail:0

options

  • accessKey

    • {String}
    • default: ''
    • description: 七牛的AK,推荐在envFile中配置,比较安全。但是在此处指定的AK优先级比envFile中的高,这样当你不想启用envFile的时候有用,比如把AK配置到vue的.env相关环境变量的文件中。
  • keyPrefix

    • {String}
    • default: ''
    • description: 七牛的路径前缀。
  • secretKey

    • {String}
    • default: ''
    • description: 七牛的SK,推荐在envFile中配置,比较安全。但是在此处指定的SK优先级比envFile中的高,这样当你不想启用envFile的时候有用,比如把SK配置到vue的.env相关环境变量的文件中。
  • cwd

    • {String}
    • default: process.cwd()
    • description: 工作目录。内部一些文件和目录的位置,都是相对这个值去处理的。
  • envFile

    • {String|mixed}
    • default: .qiniu
    • description: 环境变量的配置文件,可用来配置AK和SK。设置为falsy值时,将禁用环境变量配置的特性。
  • glob

    • {String}
    • default: dist/**
    • description: 按照node-glob开发的glob格式的字符串,用来查找待上传的文件列表。默认值是dist/**,因为这个工具目标是给vue用的,所以默认值跟vue关联比较紧密。dist/**表示要上传的文件范围就是dist/目录下的所有文件,包含子孙目录。
  • globIgnore

    • {String|Array}
    • default: [ 'dist/!(static)/**' ]
    • description: 按照node-glob开发的glob格式的字符串,用来排除不想上传的文件。也可以是一个数组,指定多个排除的glob串。建议自行配置。
  • base

    • {String}
    • default: dist
    • description: 上传的基准目录。假如有一个文件dist/static/js/app.js,因为basedist,所以这个文件将会按照static/js/app.js这个形式,作为七牛的key,进行上传。
  • output:

    • {String}
    • default: 'qiniu-upload.json
    • description: 指定上传结束后存储上传明细的导出文件。
  • bucket:

    • {String}
    • default: ''
    • description: 指定七牛的bucket。
  • overrides:

    • {Boolean}
    • default: false
    • description: 指定是否进行覆盖上传。建议保留为false,因为根据七牛对于覆盖上传的说明,同名文件,只要etag相同,如果overrides配置为false,也能上传成功;但是overrides为false时,如果同名文件etag不同,则会导致上传失败,所以overrides对于文件有一定的保护作用。
  • zone:

    • {Uploader.zone}
    • default: Uploader.zone.z0
    • description: 指定七牛的zone。 有z0 z1 z2 na0可选。
  • parallelCount:

    • {Number}
    • default: 2
    • description: 设置并行上传数。

按照前缀进行文件的批量删除

根据七牛官方的NODE SDK,要实现指定前缀的文件批量删除,还是非常容易的。这个库的使用示例如下:

const Uploader = require('@renxuetang/qiniu-upload')

new Uploader({
    debug: true
})
.fetchUploadedFiles({prefix: 'test/0.1.1/'})
.then(uploader => {
    uploader.batchDelFiles()
})

第一步,先构造Uploader。 这一步构造时,以下几个option在删除操作中仍然是需要的:

accessKey: '', // set in .qiniu file
secretKey: '', // set in .qiniu file
cwd: process.cwd(),
envFile: '.qiniu',
bucket: 'static',
zone: zone.z0

第二步,先调用fetchUploadedFiles方法,抓取指定前缀的文件列表。 这个方法接收一个对象作为参数,包含以下几个属性:

{ pageSize = 500, prefix, storageAs = 'qiniu-prefix-fetch.json' }

pageSize代表从七牛抓取文件时,每次抓取的数量,因为七牛提供的接口类似分页列表;prefix指定相关的文件的前缀;storageAs指定一个文件,用来存储最后获取到的所有满足前缀条件的文件列表。 fetchUploadedFiles是一个异步的,所以会返回一个Promise实例,在Promiseresolve的时候,进行下一步操作。 第三步,调用batchDelFiles进行删除。此方法内部接收一个对象作为参数,包含以下几个属性:

{ batchSize = 100, fetchFile = 'qiniu-prefix-fetch.json', storageAs = 'qiniu-batch-delete.json' }

batchSize表示每次调用七牛批量删除接口请求时的删除数量,fetchFile表示要删除的文件列表文件,一般要与fetchUploadedFiles方法里的storageAs参数保持一致,storageAs指定一个文件,最终会存储所有文件的删除结果。

Special Thanks

License

Copyright © 2020, renxuetang. Released under the MIT License.