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

ks-file-loader

v1.4.2

Published

file loader

Downloads

2

Readme

ks-file-loader

一个文件加载器

安装

  npm i ks-file-loader -D

Api

| 属性 | 类型 | 默认值 | 说明 | |--|--|--|--| | path | string | './' | 要处理目录(相对于项目目录, 而非文件所在目录) | | name | string / RegExp | '' | 要处理文件名 | | fullName | string / RegExp | '' | 要处理文件 (文件名+扩展名) | | ext | string / RegExp | '' | 要处理文件类型 | | mode | string | 'BFS' | 遍历模式: 深度优先(DFS)/广度优先(BFS) | | exclude | string / RegExp | - | 排除路径. 没有被排除的文件才会被加载 | | include | string / RegExp | - | 包含路径. 默认排除 node_modules 这样的大文件夹, 如果要加载, 须在include中指定 | | deep | boolean | false | 是否深层遍历 | | async | boolean | false | 当不深层遍历时, 是否异步加载 (异步时使用Promise.all加载, 不采用异步可以保持顺序) | | showDir | boolean | false | 文件夹是否经过loader | | readFile | boolean | false | 是否读取文件内容 | | output | string / Function | - | 输出文件名 | | outputDir | string | - | 输出文件夹名 | | error | function | - | 处理出错时的回调 | | done | function | - | 处理完毕时的回调 | | loader | function | - | 加载器. 参数( stats: 文件信息 data: 文件内容 done: 处理完成时要执行的回调) |

loader函数有异步操作时, 有两种方式: 1、回调函数 2、Promise(推荐).
当执行loader函数后, 返回值
为 Promise 时, loader会先等待Promise执行完毕
为 false 时, 等待用户手动调用 done
为其它值时, 则继续执行

设置了fullName时, 不再验证文件名和扩展名

output 有字符串和函数两种形式

  • 值为字符串时 匹配规则为[(.?)(path|dir|name|hash|ext)(.?)](?|) [{前缀}{精确匹配}{后缀}]{?表示精确匹配为空时, 输出空字符串}
  • 值为函数时, 等同于loader, 但如果返回了一个字符串, 那么则会进入 值为字符串 时的流程

如何使用?

案例1: 用 hexo 生成的博客, 在源码中有大量的空行, 使用

// 调用示例
const fs = require("fs");
const fileLoader = require('ks-file-loader')

fileLoader({

  // 要进行转换的目录
  // 相对于项目目录, 而非文件所在目录
  path: './public',

  // 文件扩展名, 支持正则
  ext: 'html',

  // 文件名, 支持正则
  // name: '',

  // 完整文件名, 支持正则 (验证文件名 + 扩展名)
  // fullName: ''

  // 包含目录
  // 默认会排除 node_modules 这样的大文件夹, 如果要加载, 必须在include中指定
  // include: /2018/,

  // 排除目录
  exclude: /lib/,

  // 遍历模式: 广度优先(BFS) / 深度优先(DFS)
  mode: 'DFS',

  // 是否深层遍历
  deep: true,

  // 是否读取文件内容
  readFile: true,
  /**
   * 加载器
   * @param {object} stats 文件信息
   * @param {string} data 文件内容 readFile 为 false 时返回空字符串
   * @param {function} done 文件处理完毕的回调
   * @return {Promise|false|any} Promise: 使用Promise处理异步  false: 使用回调函数处理异步(处理完需手动调用done) 其它值: 默认为同步
   */
  loader: function(stats, data, done) {
    
    // do something..
    // 替换多余的空行
    var content = data.replace(/\n(\s+)\n+/g, '\n');

    // Promise方式处理异步操作
    return new Promise((resolve, reject) {
      fs.writeFile(stats.path, content, function(error){
        if(error){
          // 处理出错时, 即便通过reject抛出了错误, 也会被忽略, 因此需要用户自己先行处理错误
          reject(error);
        } else {
          resolve();
        }
      });
    });
    // 回调函数方式处理异步操作
    // 写入文件
    fs.writeFile(stats.path, content, function(error){
      if(error){
        console.log(error);
      }
      done();
    });
    // 返回值必须全等于false
    return false;
  },
  // 转换完毕
  done: function(){
    console.log('complete');
  }
});

案例2: 给指定类型的文件加hash

const fileLoader = require('ks-file-loader')
fileLoader({
  ext: /^(js|ts)$/,
  // output: '[dir/][name-]?[hash][.ext]',
  output: function(stats) {
    let name = /\.d\.ts$/.test(stats.path) ? stats.name.slice(0, -2) + '-[hash].d' : '[name-]?[hash]'
    return '[dir/]' + name + '[.ext]'
  }
})

lisence

MIT