
Security News
TC39 Advances 11 Proposals for Math Precision, Binary APIs, and More
TC39 advances 11 JavaScript proposals, with two moving to Stage 4, bringing better math, binary APIs, and more features one step closer to the ECMAScript spec.
prepublish
Advanced tools
Simplifies the prepare step (bundling, transpiling, rebasing) during publishing NPM packages.
Prepublish is a solution for simplifying pre-publishing typical JavaScript projects for publishing to NPM.
Prepublish relies on the Babel Preset Edge for producing forward-looking optimistic code for your code base.
Prepublish produces exports of your sources depending on the entries of your packages package.json
. It supports
building for CommonJS and well as with ES Modules (ESM). Just add the relevant entries to
the configuration.
main
module
Basic Example:
{
"name": "mypackage",
"main": "lib/main.cjs.js",
"module": "lib/main.esm.js"
}
To offer separate NodeJS and Browser builds use one of the following keys for the browser bundle: browser
or web
. These bundles are always exported as ES Modules (ESM) as we have the assumption that they are bundled by another tool like Webpack or Rollup before usage.
Example:
{
"name": "mypackage",
"main": "lib/main.cjs.js",
"module": "lib/main.esm.js",
"browser": "lib/main.browser.js"
}
You might wonder how to produce a browser bundle from a different input. This is actually pretty easy. Your package just have to follow this convention.
The files are looked up for an order. The first match is being used.
src/node/public.js
src/node/export.js
src/node.js
src/server/public.js
src/server/export.js
src/server.js
src/server.js
src/public.js
src/export.js
src/index.js
src/web/public.js
src/web/export.js
src/web.js
src/browser/public.js
src/browser/export.js
src/browser.js
src/client/public.js
src/client/export.js
src/client.js
src/cli.js
src/binary.js
src/script.js
You are able to export modules for either ES5 compatible environments or for more modern platforms, too.
Note: To use these non-standard bundle outputs requires some tweaks on the bundling phase of the application, too (e.g. in Webpack). This is because we are using non-standardized configuration keys in package.json. Typically just append either :es2015
or :modern
to your normal targets:
main:es2015
module:es2015
browser:es2015
While es2015
is exactly a requirement for the client to have full ES2015 support, modern
is even more modern adding things from ES2017 to the list like async
/await
. Modern is regularly updated inside our Babel Preset. It is by no way a never changing stable target.
Example Configuration:
{
"name": "mypackage",
"main": "lib/main-cjs.js",
"module": "lib/main-esm.js",
"browser": "lib/main-browser.js",
"main:es2015": "lib/main.cjs.es2015.js",
"module:es2015": "lib/main.esm.es2015.js",
"browser:es2015": "lib/main.browser.es2015.js"
}
To make sense of all these new modules it would help to produce two different outputs. One for classic browsers and one for modern browsers. ES2015 enabled features are rapidly catching up in performance. Some features are pretty hard to rework for older browsers like Generators, Async/Await, or even Block Scope. Therefor we think there is no need for sending ES2015-capable clients the fully transpiled code down the wire. Keep in mind that you have to implement some basic client detection to send one or the other file to the matching client.
BTW: The modern builds make a lot of sense during development as it results in shorter transpiler runtimes.
Additionally prepublish
is capable in generating for binary targets.
This generates a mypackage
binary which is generated from the matching source file.
Binaries are generated from one of these source files:
src/cli.js
src/binary.js
src/script.js
Example Configuration:
{
"name": "mypackage",
"bin": {
"mypackage": "bin/mypackage"
}
}
Prepublish automatically choses the matching NodeJS version from your engines
configuration:
"engines": {
"node": ">=6.0.0",
"npm": ">=5.0.0",
"yarn": ">=1.0.0"
}
inside your package.json
. This example configuration targets any version of NodeJS matching at least the v6 capabilities.
$ npm install --save-dev prepublish
$ yarn add --dev prepublish
Prepublish comes with a binary which can be called from within your scripts
section in the package.json
file.
"scripts": {
"prepare": "prepublish"
}
There is also some amount of parameters you can use if the auto detection of your library does not work out correctly.
Usage
$ prepublish
Options
--entry-node Entry file for NodeJS target [default = auto]
--entry-web Entry file for Browser target [default = auto]
--entry-binary Entry file for Binary target [default = auto]
--output-folder Configure the output folder [default = auto]
-x, --minified Enabled minification of output files
-m, --sourcemap Create a source map file during processing
--target-modern Binaries should target Node v8 LTS instead of Node v6 LTS.
-v, --verbose Verbose output mode [default = false]
-q, --quiet Quiet output mode [default = false]
Apache License; Version 2.0, January 2004
Copyright 2016-2018
Sebastian Software GmbH
FAQs
Simplifies the prepare step (bundling, transpiling, rebasing) during publishing NPM packages.
The npm package prepublish receives a total of 24 weekly downloads. As such, prepublish popularity was classified as not popular.
We found that prepublish demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
TC39 advances 11 JavaScript proposals, with two moving to Stage 4, bringing better math, binary APIs, and more features one step closer to the ECMAScript spec.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.