Skip to content

Support new babel feature allowing plugins to indicate external dependencies #49

@TSMMark

Description

@TSMMark

Hey Kent, thanks for this awesome plugin, been using it for years and it's really handy! Also saw you got in a car accident recently and I hope you're not too beat up and recovering well.

I've been following this feature which just got merged to babel: babel/babel#14065

I think that might be useful for this plugin to implement. It could allow us to invalidate the codegen output if the code has a dependency on some files on disk.

It seems pretty simple to utilize the new feature, if I'm right you just call api.addExternalDependency(external) where external is a filepath. https://github.com/babel/babel/pull/14065/files#diff-02893c5f57e6e79d081162d32cbfe84ccfac5ed70b8933be563e1dd7256f179cR15


Here's an example of a codegen module whose result depends on files on the filesystem, and could benefit from external dependency awareness:

// @codegen
const join = require('lodash/join')
const replace = require('lodash/replace')
const glob = require('glob')
const path = require('path')

const examplesFiles = glob.sync(path.resolve(__dirname, '**/examples.*'))

export default `export default {
  ${join(examplesFiles.map((exampleFile) => {
    const chopSrcFromPath = replace(exampleFile, /(.*):?src\//, '')
    return `'${chopSrcFromPath}': require('./${chopSrcFromPath}')`
  }), ',\n')}
}
/* 02-03-2022-09:22:00 */`

Right now we resort to updating the timestamp comment to force an invalidation + codegen rebuild. (Maybe there's a better way that I don't know about?)

I'm not sure the internals of this library but do you think it makes sense to implement? I might be able to take a stab at implementing it. Let me know if you have any pointers. Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions