如果我有一个名为 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 模块(例如 下划线
)、 native Node 模块(例如 crypto
、path
>)和本地文件(例如./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 。您使用解析源代码并返回 abstract syntax tree 的东西。 (这非常类似于浏览器读取 HTML 并将其转换为 DOM 的方式。)
一旦有了 AST,遍历树并寻找有趣的部分(例如 require
调用)就相对简单了。
看起来有人已经编写了一个模块来完成这个任务,名为 required .
关于javascript - 根据文件中的需要列出文件中的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31575453/