Convert ES Modules (even in dependencies) to CommonJS. Resolves dependency issues and creates both ES and CommonJS module compatibility for packages.
Using this tool suite, you can:
- Convert packages in node_modules from es6 Module into cloned CommonJs module (this will be stored in a directory of your choosing)
- Convert your own project from es6 Module into cloned CommonJs module, so you can distribute more compatible code
In your project's root directory, run: npm install --save-dev gulp common-exports
(or yarn add --dev gulp common-exports
if you use Yarn).
It is recommended to install gulp with the -g
flag, so that you can run it with gulp
instead
of node_modules/.bin/gulp
.
In your gulpfile.js
add the following:
const convertCommon = () => {
const { makeCommon } = require('common-exports')
const mainFile = 'path to the main file you wish to convert'
const vendorPath = 'path to the directory where your exported file (and dependencies) should go'
return makeCommon(mainFile, vendorPath, { rootPath: './' })
}
exports.convertCommon = convertCommon
Create a babel.config.js
file if you do not already have one and add the following content:
module.exports = {
plugins: [
'@babel/plugin-transform-modules-commonjs'
],
presets: [
[
'@babel/preset-env',
{
useBuiltIns: 'usage',
corejs: { version: '3.6', proposals: true },
targets: { node: 'current' }
}
]
]
}
The import configuration above is the use of the plugin-transform-modules-commonjs
plugin
since that will do the major work of converting each file.
If you are copying packages from node_modules
,
ensure that you change your .gitignore for node_modules
to be /node_modules
instead to allow subdirectories to be included if you need them bundled.
Make sure to use the correct main file you wish to start conversion at and also the output directory for the conversion.
Bundle a project or vendor projects for usage as CommonJS AND ES6 modules.
Version: 1.0.0
Author: Joshua Heagle joshuaheagle@gmail.com
-
common-exports
-
.checkPackageExports(exports, modulePath) ⇒
string
|null
-
.copyResources(baseFilePath, [config]) ⇒
undefined
-
.customChanges(baseFilePath, content, [config]) ⇒
string
-
.findImports(fileContents) ⇒
Array
-
.importRegex() ⇒
string
-
.isCommonModule(moduleInfo) ⇒
boolean
-
.makeModuleInfo(dirPath, moduleName, rootPath) ⇒
Array.<ModuleInfo>
-
.replaceImportMeta(content) ⇒
string
-
.replaceImports(srcPath, destPath, [config]) ⇒
reduceImports
-
.resolveImports(file, [rootPath]) ⇒
Array.<ModuleInfo>
-
.resolveMainFile(modulePath) ⇒
string
|null
-
.resolveModule(root, moduleName, current) ⇒
Array.<string>
-
.resolvePackageExports(packageData, modulePath) ⇒
string
|null
-
.verifyModule(moduleName, current) ⇒
Array.<string>
|null
-
.makeCommon(srcPath, destPath, [config]) ⇒
stream.Stream
-
.checkPackageExports(exports, modulePath) ⇒
Given the configured exports from a package, determine the preferred entry path.
Kind: static method of common-exports
Param | Type | Description |
---|---|---|
exports |
object | string
|
The relative path used to locate the module. |
modulePath | string |
Based on configured 'copyResources', if we are in the corresponding based path copy each src to dest.
Kind: static method of common-exports
Param | Type | Default | Description |
---|---|---|---|
baseFilePath | string |
The source / module path to process. | |
[config] | Object.<'copyResources', Object.<string, Array.<Object.<('src'|'dest'|'updateContent'), (string|function())>>>> |
{} |
The copyResources config may be present, and if it has the source path as a property, then the src and dest will be used to copy resources. |
Based on configured 'customChanges', if we are in the corresponding based path, apply the change function to the content.
Kind: static method of common-exports
Param | Type | Default | Description |
---|---|---|---|
baseFilePath | string |
The source / module path to process. | |
content | string |
The file content which will receive changes. | |
[config] | Object.<'customChanges', Object.<string, Array.<Object.<'updateContent', function()>>>> |
{} |
The customChanges config may be present, and if it has the source path as a property, then the updateContent function will be applied to the contents. |
Retrieve all the module names from imports.
Kind: static method of common-exports
Param | Type | Description |
---|---|---|
fileContents | string |
The string of contents to parse for import matches. |
Get the regex for detecting ES6 import statements.
Kind: static method of common-exports
Attempt to detect if the current module is a common js module.
Kind: static method of common-exports
Param | Type | Description |
---|---|---|
moduleInfo | Object.<(module|path|file), (string|null)> |
An object containing the module, path, and file strings. |
Create the Module Info object to store the name, path, and file for each matching module.
Kind: static method of common-exports
Param | Type | Default | Description |
---|---|---|---|
dirPath | string |
Current relative directory to search. | |
moduleName | string |
Path used in the import for the module. | |
rootPath | string |
null |
The lowest path to search within for the module. |
Find usages of import.meta and replace it with CommonJs compatible substitute.
Kind: static method of common-exports
Param | Type | Description |
---|---|---|
content | string |
String of file contents to search for import.meta usage. |
Take a srcPath, destPath, then return a function to reduce the content for replacing file imports.
Kind: static method of common-exports
Param | Type | Default | Description |
---|---|---|---|
srcPath | string |
The original path of the file to be updated. | |
destPath | string |
The outgoing path of the file once updated. | |
[config] | Object.<string, Object.<string, *>> |
{} |
Additional configuration options. |
Given a file with buffer contents, identify all the imports it has and find their full paths.
Kind: static method of common-exports
Param | Type | Default | Description |
---|---|---|---|
file | StreamFile |
The in-memory fetched file object. | |
[rootPath] |
string | null
|
null |
The root path to use when resolving imports. |
Given a module path, find the file which should be used as main, based on module import.
Kind: static method of common-exports
Param | Type | Description |
---|---|---|
modulePath | string |
The relative path used to locate the module. |
Search for the given module and return the full path.
Kind: static method of common-exports
Param | Type | Description |
---|---|---|
root | string |
The base path for searching. |
moduleName | string |
The import name used for retrieving the module. |
current | string |
The current directory we are checking for module matches. |
Given the package details, determined the configured module entry point.
Kind: static method of common-exports
Param | Type | Description |
---|---|---|
packageData |
object | string
|
The package contents as an object. |
modulePath | string |
Check if the current path contains the module we are looking for.
Kind: static method of common-exports
Param | Type |
---|---|
moduleName | string |
current | string |
Apply babel to source files and output with commonJs compatibility.
Kind: static method of common-exports
Param | Type | Default | Description |
---|---|---|---|
srcPath |
string | array
|
The relative path to the file to convert. | |
destPath | string |
The relative path to the output directory. | |
[config] | Object.<string, *> |
{} |
Add additional instructions to the process. |
[config.copyResources] | Object.<string, Array.<Object.<(src|dest|updateContent), (string|function())>>> |
{} |
Add custom files to copy for found modules. |
[config.customChanges] | Object.<string, Array.<Object.<updateContent, function()>>> |
{} |
Add custom content changes to the content used. |
[config.rootPath] | string |
"''" |
Specify the root to use, this helps identify where to stop. |