All Projects → sebastian-software → prepublish

sebastian-software / prepublish

Licence: Apache-2.0 license
Simplifies the prepare step (bundling, transpiling, rebasing) during publishing NPM packages.

Programming Languages

javascript
184084 projects - #8 most used programming language
CSS
56736 projects

Projects that are alternatives of or similar to prepublish

postcss-font-grabber
A postcss plugin, it grabs remote font files and update your CSS, just like that.
Stars: ✭ 26 (+23.81%)
Mutual labels:  postcss, rollup
Sapper Template Firebase
Starter Rollup template for Sapper apps with Firebase functions based on https://github.com/nhristov/sapper-template-rollup.
Stars: ✭ 29 (+38.1%)
Mutual labels:  postcss, rollup
sapper-template-rollup
Starter Rollup template for Sapper apps using postcss, cssnano, tailwindcss, and svelte-preprocess.
Stars: ✭ 32 (+52.38%)
Mutual labels:  postcss, rollup
Commit Analyzer
💡 semantic-release plugin to analyze commits with conventional-changelog
Stars: ✭ 146 (+595.24%)
Mutual labels:  release, publish
Modular Css
A streamlined reinterpretation of CSS Modules via CLI, API, Browserify, Rollup, Webpack, or PostCSS
Stars: ✭ 234 (+1014.29%)
Mutual labels:  postcss, rollup
Github
semantic-release plugin to publish a GitHub release and comment on released Pull Requests/Issues
Stars: ✭ 159 (+657.14%)
Mutual labels:  release, publish
Mdl Skeleton
Material Design skeleton with ssr-engine
Stars: ✭ 17 (-19.05%)
Mutual labels:  postcss, rollup
Git Release
Publish a GitHub Release 📦 with Assets 📁 and Changelog 📄
Stars: ✭ 77 (+266.67%)
Mutual labels:  release, publish
Front End Tooling Recipes
Collection of pre-configured front-end tooling setups for common uses.
Stars: ✭ 176 (+738.1%)
Mutual labels:  postcss, rollup
Rollup Plugin Styles
🎨 Universal Rollup plugin for styles: PostCSS, Sass, Less, Stylus and more.
Stars: ✭ 116 (+452.38%)
Mutual labels:  postcss, rollup
Release Notes Generator
📋 semantic-release plugin to generate changelog content with conventional-changelog
Stars: ✭ 123 (+485.71%)
Mutual labels:  release, publish
wisdom
🎁 Tool for publishing releases to github and npm
Stars: ✭ 16 (-23.81%)
Mutual labels:  release, publish
Npm
🚢 semantic-release plugin to publish a npm package
Stars: ✭ 103 (+390.48%)
Mutual labels:  release, publish
Semantic Release
📦🚀 Fully automated version management and package publishing
Stars: ✭ 14,364 (+68300%)
Mutual labels:  release, publish
Bintray Publish
Super easy way to publish your Android and Java artifacts to bintray.
Stars: ✭ 97 (+361.9%)
Mutual labels:  release, publish
Rollup Plugin Postcss
Seamless integration between Rollup and PostCSS.
Stars: ✭ 507 (+2314.29%)
Mutual labels:  postcss, rollup
Condition Travis
🚫 semantic-release plugin to check Travis CI environment before publishing.
Stars: ✭ 9 (-57.14%)
Mutual labels:  release, publish
Automatic Release
Automates the release process for GitHub projects.
Stars: ✭ 46 (+119.05%)
Mutual labels:  release, publish
Shortstack
🥞 minimal Rollup + PostCSS modern syntax starter template
Stars: ✭ 94 (+347.62%)
Mutual labels:  postcss, rollup
rollit
🌯 Zero config js library bundling using rollup with support for Vue
Stars: ✭ 24 (+14.29%)
Mutual labels:  rollup, publish

Prepublish
Sponsored by Version Downloads Build Status Unix Build Status Windows Dependencies

Prepublish is a solution for simplifying pre-publishing typical JavaScript projects for publishing to NPM.

Transpilers

Prepublish relies on the Babel Preset Edge for producing forward-looking optimistic code for your code base.

Output Targets

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.

  • CommonJS Output: main
  • ESM Output: 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"
}

Input Entries

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.

Entries for NodeJS targets

  • 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

Sources for the Browser targets

  • 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

Sources for binary targets

  • src/cli.js
  • src/binary.js
  • src/script.js

Targetting ES2015

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:

  • CommonJS Output for NodeJS with ES2015 kept intact: main:es2015
  • ES Modules Output for NodeJS with ES2015 kept intact: module:es2015
  • Browser Output as ES Modules with ES2015 kept intact: 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.

Binary Output

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.

Related Content

Installation

NPM

$ npm install --save-dev prepublish

Yarn

$ yarn add --dev prepublish

Usage

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]

License

Apache License; Version 2.0, January 2004

Copyright

Logo of Sebastian Software GmbH, Mainz, Germany

Copyright 2016-2018
Sebastian Software GmbH

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].