根据文件中的要求列出文件中的依赖项

Listing out the dependancies from a file based on what's required in the file

如果我有一个名为 index.js 的文件,它需要几个模块。有什么办法可以获得所需模块的列表吗?

var _ = require("underscore")
var express = require("express")
var app = express()
return app

那我还有一个这样的文件。

var listRequired = require("list-required")
listRequired("./index.js").then(function(moduleTypes){
  console.log(moduleTypes.npm) // ["underscore", "express"]
})

我真的也想要一种跟踪 npm 模块(例如 underscore)、本机节点模块(例如 cryptopath)和本地文件(例如../routes.js)

所以如果 index.js 包含这个:

var _ = require("underscore")
var express = require("express")
var routes = require("./routes")
var app = express()
module.exports = app

并且 routes.js 包含这个:

var crypto = require("crypto")
var Promise = require("bluebird")
module.exports = {}

那我还有一个这样的文件。

var listRequired = require("list-required")/*(file, deepOption)*/
listRequired("./index.js", true).then(function(moduleTypes){
  console.log(moduleTypes.native) // ["crypto"]
  console.log(moduleTypes.local) // ["./routes"]
  console.log(moduleTypes.npm) // ["underscore", "express"]
})

这是否已经以某种身份存在? ES6 import 支持也很好。

用于解决此类问题的技术称为static analysis. You use something that parses source code and returns an abstract syntax tree。 (这很像浏览器读取 HTML 并将其转换为 DOM 的方式。)

一旦你有了 AST,就可以相对简单地遍历树并寻找有趣的位,例如 require 调用。

看起来有人已经编写了一个模块来实现这一点,称为 required