detect-import-require
v2.0.0
Published
list require and import paths from a JavaScript source
Downloads
705
Maintainers
Readme
detect-import-require
This is like detective, but with a narrow focus and thin API, specifically aimed at supporting either import
and/or require
statements, and not much more.
Install
npm install detect-import-require --save
Example
Given the following file:
source.js
var foo = require('a').foo
var bar = require('./blah.js')
import { uniq } from 'lodash'
import { resolve } from 'path'
var fs = require('fs')
var detect = require('detect-import-require')
var src = fs.readFileSync('source.js', 'utf8')
console.log(detect(src))
//=> [ 'a', './blah.js', 'lodash', 'path' ]
See Custom AST for details on parsing additional language syntax, such as JSX or async/await.
Usage
modules = detect(src, [opt])
Returns an array of module names (require paths) from the given src
String, Buffer or AST. By default, looks for import
and require
statements. Results are not de-duplicated, and are in the order they are found.
Options:
imports
(Boolean) - whether to look forimport
statements, default truerequires
(Boolean) - whether to look forrequire
statements, default true
modules = detect.find(src, [opt])
Takes the same options as above, but returns an object with the following additional data:
{
strings: [],
expressions: [],
nodes: []
}
Where strings
is the array of module names, expressions
is an array of expressions from dynamic require()
statements, and nodes
is an array of AST nodes for each found require/import statement.
Expressions do not appear in imports, and look like this:
[
"path.join(__dirname, '/foo.js')",
"__dirname + '/file.js'"
]
Custom AST
You can also pass a parsed AST, e.g. if you have a special build of acorn or want full control over parsing options. Here is an example with JSX:
var detect = require('detect-import-require')
var acorn = require('acorn-jsx');
var jsx = [
"import 'foo';",
"ReactDOM.render(",
"<h1>Hello World</h1>,",
"document.getElementById('root')",
");"
].join('\n');
var ast = acorn.parse(jsx, {
ecmaVersion: 6,
sourceType: 'module',
allowReserved: true,
allowReturnOutsideFunction: true,
allowHashBang: true,
plugins: {
jsx: true
}
})
detect(ast)
// => [ 'foo' ]
License
MIT, see LICENSE.md for details.