Output Targets
One of the more powerful features of the compiler is its ability to generate various builds depending on
"how" the components are going to be used. Stencil is able to take an app's source and compile it to numerous targets, such as a webapp to be deployed on an http server, as a third-party component lazy-loaded library to be distributed on
npm, or a vanilla custom elements bundle. By default, Stencil apps have an output target type of
www
, which is best suited for a webapp.
Output Target Types:
Stencil offers the following output targets:
dist
: Distributionwww
: Websitedist-custom-elements
: Custom Elementsdist-custom-elements-bundle
: Custom Elements Bundlestats
: Stats about the compiled files
Users can also take advantage of special output targets to generate documentation for their components.
For more information, please see the
Documentation Generation section
Example:
import { Config } from '@stencil/core';
export const config: Config = {
outputTargets: [
{
type: 'dist'
},
{
type: 'www'
}
]
};
Differential Bundling
It's also important to note that the compiler will automatically generate the numerous bundles in order to support "differential bundling". What this means is that during production builds, Stencil will generate code for both modern browsers, and legacy browsers (IE11) from the same source code. The advantage of differential bundling is that modern browsers can avoid all the polyfills and bloated legacy JavaScript, and use the modern APIs already baked into the browser.
In the example below there are two script tags, however, only one of them will be requested by the user. For IE11 users, they'll download the
app.js
file which is in the ES5
syntax and has all the polyfills. For users on modern browsers, they will only download the
app.esm.js
file which uses up-to-date JavaScript features such as
ES modules, dynamic imports, async/await, Classes, etc.
Note: buildEs5 must be set to true to generate the IE11 ES5 file
<script type="module" src="/build/app.esm.js"></script>
<script nomodule src="/build/app.js"></script>
Contributors
Thanks for your interest!
We just need some basic information so we can send the guide your way.