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 🙏

© 2026 – Pkg Stats / Ryan Hefner

source-replace-plugin

v0.0.2

Published

文件代码替换webpack插件

Readme

source-replace-plugins

一个文件代码替换webpack插件。

插件功能:将原文件中设置的特殊字符串,替换成对应文件的代码;

usage

// webpackConfig/webpack.config.js
plugins: [
  new SourceReplace({
    basePath: path.join(__dirname, '..'),
    sourcePath: path.join(__dirname, '../src/run.js'),
    targetPath: path.join(__dirname, '../dist/js/run.bundle.js'),
    replaceMode: 'js'
  })
]
  • basePath:必填;项目根路径,在sourcePath的文件中,所有匹配到的字符串的文件路径都是以这个为基准的,可参考下面的demo。
  • sourcePath:必填;需要替换的文件路径;
  • targetPath:必填;替换后输出的文件路径;
  • replaceMode:选填;默认为js;插件中预设的替换模式,暂时只有js模式;
  • templateReg:选填;字符串匹配正则;匹配sourcePath文件中需要替换的字符串;如果replaceMode设置了js,则templateReg默认会被配置成**/\@\{\{\{([^\}]+)\}\}\}/gi**。
  • replaceFunc:选填;替换处理函数;可以将读入的文件进行自定义处理之后再写入;如果replaceMode设置了js,则replaceFunc默认会被设置成如下函数:
replaceFunc = function (bundleFileCode, targetStr) {
  let code = ''
  code = bundleFileCode.replace(/\\/gi, '\\\\')
  code = code.replace(/"/gi, '\\"')
  return code
}

其中 bundleFileCode 为字符串匹配到的文件的代码,targetStr 为匹配到的文锦啊的字符串。

Demo

run.js文件中的***@{{{dist/js/run.bundle.js}}}*字符串,替换成dist/js/run.bundle.js**文件的所有代码;

// run.js
function createScriptDom (content) {
  var dom = document.createElement('script')
  dom.setAttribute('type', 'text/javascript')
  dom.innerText = scriptContent
  document.head.appendChild(dom)
}
createScriptDom("@{{{./dist/js/run.bundle.js}}}")
// webpackConfig/webpack.config.js
module.exports = {
  ...
  plugins: [
    new SourceReplace({
      basePath: path.join(__dirname, '..'),
      sourcePath: path.join(__dirname, '../src/run.js'),
      targetPath: path.join(__dirname, '../dist/js/run.bundle.js'),
      replaceMode: 'js'
    })
  ]
}