首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到最常用的JS文件?

如何找到最常用的JS文件?
EN

Stack Overflow用户
提问于 2018-03-06 19:59:03
回答 1查看 158关注 0票数 2

我有一个项目,与许多相互关联的文件,需要彼此。我想知道不包括npm模块,哪个是最常用的依赖项(JS文件),每种使用都被定义为依赖文件中的“require”或“import”语句。

示例:我有存储在src/general/utils.js中的常用方法,并在整个应用程序中由多个文件导入。因此,这将是我最常用的文件utils.js

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-08 20:22:23

先做几件事。

需要注意的是,import命令并不是nodeJS的原生命令。相反,它是由诸如webpack所使用的那些传输程序提供的特性,所有这些特性都将将import命令转换为节点内部Module模块提供的NodeJS支持的require()

在幕后,Module.require()使用一个缓存来保存所有以前所需的模块来优化需求,因此它们只包含一次。

对于您的问题,计算由nodeJS运行时加载的模块的一种方法是覆盖require()中定位和加载所需模块的部分,这些模块要么来自内部源(如eventsfs等),要么来自文件系统(第一次需要),或者需要缓存(针对已经加载的模块的后续需求)。

这可以通过创建并要求以下模块作为应用程序使用的第一个需求来实现:

代码语言:javascript
运行
复制
// filename: module-override.js
const Module = require('module')

Module.MODULES = {
  LOADED: {},
  CACHED: {}
}
Module.__load = Module._load // save original _load()

Module._load = function (request, parent, isMain) { // redefine _load()
  const filename = Module._resolveFilename(request, parent, isMain)
  const key = filename.replace(/^\/Users\/USERNAME/, '...')
  if (!key.match(/node_modules/)) { // ignore paths with node_modules
    let val
    if (Module._cache[filename]) { // exists in Module_cache
      val = Module.MODULES.CACHED[key] || 0
      Module.MODULES.CACHED[key] = val + 1
    }
    val = Module.MODULES.LOADED[key] || 0
    Module.MODULES.LOADED[key] = val + 1
  }
  return Module.__load(request, parent, isMain) // the original _load()
}

注意:您可以注释掉定义key的行。我补充说,所以字符串化Module.MODULES的输出不包含任何本地标识信息。

一旦您需要这个模块,它将收集Module.MODULES中所有所需模块的计数。

Module.MODULES.LOADED将跟踪一个模块需要多少次,而Module.MODULES.CACHED将对已从内部模块缓存完成的需求进行相同的跟踪。

假设我在./lib下有两个模块,名为utils.jsSchedule.js,其中

  • ./lib/utils需要utilpatheventsdebugjson-stringify-safelodash
  • Schedule.js需要pathcolors./lib/utils

而且我有一个顶级文件,需要./lib/Schedule./lib/utils

在所有的要求都完成后,我可以调用

代码语言:javascript
运行
复制
console.log(JSON.stringify(Module.MODULES))

它将打印到控制台:

代码语言:javascript
运行
复制
{ 
  LOADED: {
    '..././lib/Schedule.js': 1,
     path: 2,
     '..././lib/utils.js': 2,
     util: 2,
     events: 1,
     tty: 1
   },
  CACHED: {
    '..././lib/utils.js': 1
  }
}

这告诉我

  • ./lib/Schedule.js只从文件系统加载一次,
  • pathutileventstty是从nodeJS的内部模块加载的,
  • utils被加载了两次,一次是从其文件加载的,一次是从内部需求缓存加载的。

如果没有在/node_modules/下清除所有模块的测试,输出将是:

代码语言:javascript
运行
复制
{
  LOADED: {
    '.../lib/Schedule.js': 1,
    path: 2,
    '.../node_modules/colors/lib/index.js': 1,
    '.../node_modules/colors/lib/colors.js': 6,
    '.../node_modules/colors/lib/styles.js': 1,
    '.../node_modules/colors/lib/system/supports-colors.js': 1,
    '.../node_modules/colors/lib/custom/trap.js': 1,
    '.../node_modules/colors/lib/custom/zalgo.js': 1,
    '.../node_modules/colors/lib/maps/america.js': 1,
    '.../node_modules/colors/lib/maps/zebra.js': 1,
    '.../node_modules/colors/lib/maps/rainbow.js': 1,
    '.../node_modules/colors/lib/maps/random.js': 1,
    '.../node_modules/colors/lib/extendStringPrototype.js': 1,
    '.../lib/utils.js': 2,
    util: 2,
    events: 1,
    '/.../node_modules/lodash/lodash.js': 1,
    '/.../node_modules/json-stringify-safe/stringify.js': 1,
    '.../node_modules/debug/src/index.js': 1,
    '.../node_modules/debug/src/node.js': 1,
    tty: 1,
    '.../node_modules/debug/src/debug.js': 1,
    '.../node_modules/ms/index.js': 1,
    '/.../node_modules/supports-color/index.js': 1 },
  CACHED: {
    '.../node_modules/colors/lib/colors.js': 5,
    '.../lib/utils.js': 1
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49139013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档