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

gulp-useref-cdn

v0.1.0

Published

Parse build blocks in HTML files to replace references and automatically upload to qiniu cdn.

Downloads

9

Readme

gulp-useref-cdn

Build Status

Parse build blocks in HTML files to replace references and automatically upload to qiniu cdn.

Inspired by grunt-useref and gulp-useref. It can handle file concatenation but not minification. And it can upload the concatenated file to cdn automatically. Files are then passed down the stream. For minification of assets or other modifications, use gulp-if to conditionally handle specific types of assets.

Note: lot of code from gulp-useref. gulp-useref doesn't apply a way to manage html file analysis or a callback after html file analysis. This is why I don't make gulp-useref as lib dependency and rewrite based on it.

Install

Install with npm

npm install --save-dev gulp-useref-cdn

Usage

The following example will parse the build blocks in the HTML, replace them, upload to cdn, and pass those files through. Assets inside the build blocks will be concatenated and passed through in a stream as well.

var gulp = require('gulp'),
    useref = require('gulp-useref-cdn');

gulp.task('default', function () {
    var assets = useref.assets();

    return gulp.src('app/*.html')
        .pipe(assets)
        .pipe(assets.restore())
        .pipe(useref())
        .pipe(gulp.dest('dist'));
});

More details: https://github.com/jonkemp/gulp-useref. All gulp-useref's syntax and usage are supported by gulp-useref-cdn.

What's important here is that an extended syntax/usage is added!

<!-- build:<type>(alternate search path) <path> <attrs> -->

Before, type could be either js, css or remove. And the new cdn is added now.

When you use cdn as the type, no need to write js or css anymore. The plugin will detect it automatically, and it will do the work as expected when you use js|css.

And with the cdn type, the plugin will upload the concatenated file to qiniu cdn.

An example of this in completed form can be seen below:

<html>
<head>
    <!-- build:cdn css/combined.css -->
    <link href="css/one.css" rel="stylesheet">
    <link href="css/two.css" rel="stylesheet">
    <!-- endbuild -->
</head>
<body>
    <!-- build:cdn scripts/combined.js <bucket='xxx'> <key='yyy'>-->
    <script type="text/javascript" src="scripts/one.js"></script>
    <script type="text/javascript" src="scripts/two.js"></script>
    <!-- endbuild -->
</body>
</html>
import cdn from 'gulp-useref-cdn';
let assets = cdn.assets({
    accessKey: 'ACCESS_KEY',
    secretKey: 'SECRET_KEY',
    domain: 'DOMAIN',
    bucket: 'BUCKET', // could be replaced if you rewrite at html <bucket='xxx'>
    keyPrefix: ''
});

gulp.src('test/fixtures/cdn.html')
    .pipe(assets)
    .on('error', (err) => {
        done(err);
    })
    .pipe(assets.restore())
    .pipe(cdn())
    .pipe(gulp.dest('dist'));

The resulting HTML would be:

<html>
<head>
    <link rel="stylesheet" href="http://7xkuzg.com1.z0.glb.clouddn.com/combined-f9ebd308.css"/>
</head>
<body>
    <script src="http://7xkuzg.com1.z0.glb.clouddn.com/combined-ce2a0c47.js"></script>
</body>
</html>

And you will see combined-ce2a0c47.js and combined-f9ebd308.css in your qiniu cdn's bucket.

API

useref(options)

Returns a stream with the asset replaced resulting HTML files. Supports all options from useref.

useref.assets(options)

Returns a stream with the concatenated asset files from the build blocks inside the HTML.

options.searchPath

Type: String or Array
Default: none

Specify the location to search for asset files, relative to the current working directory. Can be a string or array of strings.

options.noconcat

Type: Boolean
Default: false

Skip concatenation and add all assets to the stream instead.

options.silent

Type: Boolean
Default: true

Set to false if you want to see messages except error.

options.md5

Type: Number
Default: 8

options.keyPrefix

Type: String
Default: gulp-useref-cdn/

The above two are all about key. Key is defined by Qiniu. Key can be set clearly via <key='yyy'> in comment.

When key is not offered, plugin will generate the key:

prefix + filename + '-' + md5 + '.' + filetype;
  • prefix --- options.keyPrefix
  • md5 --- the md5 string of the file, options.md5 specify md5's length(after cut).
  • filename, filetype are offered by plugin.

stream.restore()

Brings back the previously filtered out HTML files.

License

Copyright (c) 2015 creeperyang. Licensed under the MIT license.