Don't Publish .bablerc to Npm
Don't publish your .babelrc
file to npm if you have pre-built your package.
Publish .babelrc if Compiling Still Required
It's possible that you intend for others to compile the code you publish to npm. You'd do this if you published your source to npm without precompiling but are using features not included in the target runtime for this code. In this case, you still want to publish your .babelrc
file alongside your package code. In this circumstance, you can probably disregard the rest of this article.
All Babelrc's Used
In the case where you have already pre-built your code but still have a babel process to build your local app code, you're probably going to have problems if you attempt to use a package that publishes a .bablerc
file. This is because your app has its own .babelrc
file and its own build requirements. But if you start using a library from npm that has a new .babelrc
file, that .babelrc
file is going to be picked up and used by babel as well.
Per the babel docs:
Babel will look for a .babelrc in the current directory of the file being transpiled. If one does not exist, it will travel up the directory tree until it finds either a .babelrc, or a package.json with a "babel": {} hash within.
Unknown Plugin
If you start using a package from npm with a .babelrc
file that you don't anticipate, it probably means that you will not have all the babel plugins or presets installed to deal with building it.
You'll end up with an error like this:
Module build failed: ReferenceError: Unknown plugin "glamorous-displayname" specified in "/Users/legolas/code/mycode/client/node_modules/@pluralsight/ps-design-system-button/.babelrc" at 0, attempted to resolve relative to "/Users/legolas/code/mycode/client/node_modules/@pluralsight/ps-design-system-button"
at /Users/legolas/code/mycode/client/node_modules/babel-core/lib/transformation/file/options/option-manager.js:180:17
at Array.map (native)
at Function.normalisePlugins (/Users/legolas/code/mycode/client/node_modules/babel-core/lib/transformation/file/options/option-manager.js:158:20)
at OptionManager.mergeOptions (/Users/legolas/code/mycode/client/node_modules/babel-core/lib/transformation/file/options/option-manager.js:234:36)
Again, this is a completely avoidable problem in the case that you've already prebuilt and published your compiled code to npm.
Ignore .babelrc
You want to make sure that your .babelrc
for your packaged library doesn't make it to npm at all.
To accomplish this, add it to your .npmignore
file in your project root:
.babelrc
The next time you npm publish
this package, .bablerc
will not show up in npm, and you will have bypassed this whole issue.
What else do you do to tidy up your prebuilt packages before you publish to npm?