0.0.6 • Published 7 months ago
@planet-a/parcel-optimizer-versioned-imports v0.0.6
Parcel Optimizer for versioned imports
Transforms code looking like this:
import { bar } from "foo";with package-lock.json defining version 1.2.3 for foo into:
import { bar } from "foo@1.2.3";as needed for Pipedream for example.
Caveats
- I added rudimentary sourcemap support, but as Pipedream does not currently support source maps, it is untested.If you need working sourcemap support for this optimizer -> Contributions welcome.
- Only works for
ImportDeclarationnodes, not commonjs imports. Contributions welcome. - Currently only supports npm-based projects that have a
package-lock.jsonfile, as this is used to determine the embedded version. It should be simpel to support other packagers and their dependency graph definitions -> Contributions welcome (starting point could be this package).
How to use
{
"extends": "@parcel/config-default",
"optimizers": {
"*.{js,mjs,jsm,jsx,es6,cjs,ts,tsx,mts,cts}": [
"...",
"@planet-a/parcel-optimizer-versioned-imports"
]
}
}Options
ignoreSubmoduleImports: if set totrue, import with submodule paths will not be versioned, e.g.import "fs-extra/esm"will be left alone.
You can create a .parcel-optimizer-versioned-importsrc config file or put it into the respective package.json section, e.g.:
"@planet-a/parcel-optimizer-versioned-imports": {
"ignoreSubmoduleImports": true
}Why is this not a Transformer plugin?
Transformers require that import declarations can be resolved after transformation, as other transformers may need/want to transform the code further. Changing an import into a non-standard import (in the node world, not the Deno world) like package@version means subsequent resolution fails. Optimizers are run at the end of the pipeline and are this one is meant to be the very last one that does code transformations with introspection.