Code Monkey home page Code Monkey logo

find-imports's Introduction

find-imports build status Coverage Status

NPM

Find all imported modules in JavaScript files. It's useful for bundling 3rd-party libraries into a vendor.js using webpack. For example:

var webpack = require('webpack');
var findImports = require('find-imports');

// Webpack Configuration
module.exports = {
    entry: {
        app: [
            './src/index.js'
        ],
        vendor: findImports('src/**/*.{js,jsx}', { flatten: true })
    },
    output: {
        path: path.join(__dirname, 'dist'),
        filename: '[name].js'
    },
    plugins: [
        new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js')
    ]
};

Installation

npm install --save-dev find-imports

Usage

The default options only return package imports:

import findImports from 'find-imports';

const files = [
    // glob pattern
    'src/**/*.{js,jsx}',

    // use negative glob pattern to exclude files
    '!src/**/*.spec.js'
];

findImports(files);
// → { 'src/index.jsx':
//     [ 'lodash',
//       'async',
//       'jsuri',
//       'react',
//       'react-dom',
//       'react-router' ] }

To flatten the output:

findImports(files, { flatten: true });
// → [ 'lodash',
//     'async',
//     'jsuri',
//     'react',
//     'react-dom',
//     'react-router' ]

To return absolute and relative imports:

findImports(files, {
    absoluteImports: true,
    relativeImports: true
});
// → { 'src/index.jsx':
//     [ 'lodash',
//       'async',
//       'jsuri',
//       'react',
//       'react-dom',
//       'react-router',
//       '/index.styl',
//       './index.css' ] }

To only return absolute and relative imports (no packages):

findImports(files, {
    absoluteImports: true,
    relativeImports: true,
    packageImports: false
});
// → { 'src/index.jsx':
//     [ '/index.styl',
//       './index.css' ] }

Options

Below are the options with their default values:

{
    flatten: false,
    packageImports: true,
    absoluteImports: false,
    relativeImports: false
}

flatten

Type: Boolean Default: false

Sets true to flatten the output and filter duplicate ones.

packageImports

Type: Boolean Default: true

Sets true to return package imports.

absoluteImports

Type: Boolean Default: false

Sets true to return absolute imports.

relativeImports

Type: Boolean Default: false

Sets false to return relative imports.

License

Copyright (c) 2016 Cheton Wu

Licensed under the MIT License.

find-imports's People

Contributors

agerard-godaddy avatar btmpl avatar cheton avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

find-imports's Issues

support TypeScript type imports

hey @cheton Thanks for creating find-imports! I'm trying to use it to flatten TypeScript type imports from multiple files into a single @types file, but I get an error, because it's not in the expected format. Example:

import type {
  Host,
  Network,
  SshKey,
} from './generated.ts';

This ^ produces the following error: Unexpected token, expected "from"

If this could be enhanced to handle type imports, it would be great!

recursive?

I need to get all the local imports from a given file recursively (so that I'll know when I have to re-run a test if a relevant source file changes).

Can this module do that already? If not, it could just be a separate module that depends on this one.

Dynamic `import()`s

Add support for dynamic import() statements. I think it would be mostly similar to the detection of require()s.

Is it possible to support scss files?

Hey, this is an amazing library. I'm trying to find all uses of a particular library. I noticed in your demo you suggested it found a css file. I'm am trying to find imports in scss files.

const files = [
  'src/**/*.{js,jsx,scss}',
  '!src/lib/*.*',
];

const results = findImports(files, {
  absoluteImports: true,
  relativeImports: true,
  flatten: true,
});

Sadly this outputs Error in `undefined`: SyntaxError: /Users/ccheshire/Development/work/app-qa/src/css/_action-buttons.scss: Unexpected token (1:0)

The action-buttons file itself only includes a few css classes.

Is this because the scss file isn't javascript and therefore the syntax isn't valid?

async API

Add async API using Promises instead of just only sync one, that's suboptimal from a performance view.

fails to parse files with async await

this example file fails to parse when I use the async await syntax

// src/testfile.js
const { add } = require('../')

const timeout = n => new Promise(resolve, setTimeout(resolve, n))

const runAfterOneSecond = async (x, y) => {
  await timeout(1000)
  return add(x, y)
}

this is the error:

> findImports('./src/testfile.js', { relativeImports:true, absoluteImports:false, packageImports:false })
Error in `undefined`: Error: Line 7: Unexpected token =>

[Suggestion] Support for list of excluded path/files

Hi @cheton : Is there a way to exclude certain directories/files specified under glob pattern? I believe it would be a good addition for this tool.

e.g.

const files = ['src/**/*.{js,jsx}']
const filesToExclude = ['src/**/*spec.js}']
findImports(files, filesToExclude)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.