dependency-analyze
js/css code dependency analyze.
Usage
Parse file/dir
Parse javascript/css code:
const analyze = let jsCode = `import './aaa.scss' const xxx = require('bbb') require.resolve('../ccc.js')` // result: [// './aaa.scss',// 'bbb',// '../css.js'// ]analyze let cssCode = `@import "aaa.scss", "bbb.scss", 'ccc.scss'; @import "./ddd.scss"; // @import "./eee.scss"; /* @import "./fff.scss" */` // result: [// 'aaa.scss',// 'bbb.scss',// 'ccc.scss',// './ddd.scss'// ]analyze
Parse js/css file:
const analyze = // result: [// 'dep1',// 'dep2',// ...// ]analyze
Parse a directory:
const analyze = // result: {// 'file.js': [// 'dep1',// 'dep2',// ...// ],// 'file.css': [// 'dep1.css',// 'dep2.css',// ...// ],// ...// }analyze
Analyze file
analyze dependencies from content recursively.
const analyze = // result: {// '/path/to/mock/file.js', {// deps: [{// parent: '/path/to/mock/file.js',// raw: 'react',// name: 'react',// module: 'react',// file: null// }, {// parent: '/path/to/mock/file.js',// raw: 'react-dom',// name: 'react-dom',// module: 'react-dom',// file: null// }, {// parent: '/path/to/mock/file.js',// raw: './src/index.jsx',// name: './src/index.jsx',// module: null,// file: '/path/to/mock/src/index.jsx'// }],// modules: [// 'react',// 'react-dom'// ],// relatives: [// '/path/to/mock/src/index.jsx'// ],// },// '/path/to/mock/src/index.jsx': {// deps: [ ... ],// modules: [ ... ],// relatives: [ ... ]// },// ...// }analyze // or your can pass file (if file exists)analyze // or multiple entries// or your can pass file (if file exists)analyze
API
analyze.parseJS(content)
Parse js code and get it's dependencies.
params
content {String}
js code
return
{Array}
an dependencies array
analyze.parseCSS(content)
Parse css (sass/less) code and get it's dependencies.
params
content {String}
css (sass/less) code
return
{Array}
an dependencies array
analyze.parse(file[, matches])
Parse a file/directory, and get it's dependencies.
params
file {String}
file or dir pathmatches {String|Array}
minimatch rules (String
will be treat as a single rule)
If matches
is specfied, the files under basedir (file
) will be filtered; otherwise all files except dot-started file (.xxx
, *nix hidden file) will be parsed.
return
-
{Array}
iffile
is a File, then dependencies array will be return -
{Object}
iffile
is a directory, then a (file => dependencies) Object will be return, just like:return'dir/index.js':'dep1''dep2'...'dir/index.css':'dep1''dep2'...
analyze.analyze(entry[, options])
analyze dependencies of specified entry (eg. file path, file content, multiple files) recursively.
params
entry {Mixed}
type ofentry
can beString
(file path) orObject
(file + content info), or multiple entries{String}
the file path{Object}
the object of file and content{ file: ..., content: ... }
{Array}
the array of file or file/content object
options {Object}
analyze options- depth
{Number}
max recursive resolve depth (default is Infinity) - depResolve
{Function}
custom resolve dep to standard format (e.g.~xxx
=>xxx
) - filter
{Function}
filter which deps can be resolved, will be invoked with(dep, currFile)
- depth
options.depResolve
will be invoked with params (dep, currFile, defaultResolve)
:
dep {String}
original dep stringcurrFile {String}
current file to resolvedefaultResolve {Function}
default dep resolve function
return
will return a object like:
'/path/to/entry.js': deps: parent: '/path/to/entry.js' raw: 'react' name: 'react' module: 'react' file: null ... modules: 'react' ... relatives: '/path/to/a.js' ...
Parser
dependency-analyze use different parser to parse code.
javascript
Use babylon to parse js code, these statements will be considered as a dependency:
import 'xxx'
require('xxx')
require.resolve('xxx')
css
Use RegExp to parse css code, @import
statement will be considered as a dependency.
Don't worry about @import
in css comments, they will be skipped
License
MIT