Stencil Config
In most cases, the stencil.config.ts
file does not require any customization since Stencil comes with great default values out-of-the-box. In general, it's preferred to keep the config as minimal as possible. In fact, you could even delete the stencil.config.ts
file entirely and an app would compile just fine. But at the same time, the compiler can be configured at the lowest levels using this config. Below are the many optional config properties.
Example stencil.config.ts
:
import { Config } from '@stencil/core';
export const config: Config = {
namespace: 'MyApp',
srcDir: 'src'
};
buildDist
default: true (prod), false (dev)
Sets whether or not Stencil will execute output targets and write output to
dist/
when stencil build
is called. Defaults to false
when building for
development and true
when building for production. If set to true
then
Stencil will always build all output targets, regardless of whether the build
is in dev or prod mode or using watch mode.
buildDist: true
buildEs5
Sets if the ES5 build should be generated or not.
It defaults to false
.
Setting buildEs5
to true
will also create es5 builds for both dev and prod modes.
Setting buildEs5
to prod
will only build ES5 in prod mode.
If the app does not need to run on legacy browsers (IE11 and Edge 18 and below), buildEs5
set to false
, which will also speed up production build times.
In addition to creating es5 builds, apps may also be interested in enable runtime options to support legacy browsers.
See config extras for more information.
As of Stencil v3, legacy browser support is deprecated, and will be removed in a future major version of Stencil.
buildEs5: boolean | 'prod'
bundles
By default, Stencil will statically analyze the application and generate a component graph of how all the components are interconnected. From the component graph it is able to best decide how components should be grouped depending on their usage with one another within the app. By doing so it's able to bundle components together in order to reduce network requests. However, bundles can be manually generated using the bundles
config.
The bundles
config is an array of objects that represent how components are grouped together in lazy-loaded bundles. This config is rarely needed as Stencil handles this automatically behind the scenes.
bundles: [
{ components: ['ion-button'] },
{ components: ['ion-card', 'ion-card-header'] }
]
devServer
Please see the Dev-Server docs.
enableCache
default: true
Stencil will cache build results in order to speed up rebuilds. To disable this feature, set enableCache
to false
.
enableCache: true
extras
Please see the Extras docs.
globalScript
The global script config option takes a file path as a string.
The global script runs once before your library/app loads, so you can do things like setting up a connection to an external service or configuring a library you are using.
The code to be executed should be placed within a default function that is exported by the global script. Ensure all of the code in the global script is wrapped in the function that is exported:
export default function() { // or export default async function()
initServerConnection();
}
The exported function can also be async
but be aware that this can have implications on the performance of your application as all rendering operations are being executed after the global script finishes..
globalStyle
Stencil is traditionally used to compile many components into an app, and each component comes with its own compartmentalized styles. However, it's still common to have styles which should be "global" across all components and the website. A global CSS file is often useful to set CSS Variables.
Additionally, the globalStyle
config can be used to precompile styles with Sass, PostCSS, etc.
Below is an example folder structure containing a webapp's global css file, named app.css
.
src/
components/
global/
app.css
The global style config takes a file path as a string. The output from this build will go to the buildDir
. In this example it would be saved to www/build/app.css
.
globalStyle: 'src/global/app.css'
Check out the styling docs of how to use global styles in your app.
hashedFileNameLength
default: 8
When the hashFileNames
config is set to true
, and it is a production build, the hashedFileNameLength
config is used to determine how many characters the file name's hash should be.
hashedFileNameLength: 8
hashFileNames
default: true
During production builds, the content of each generated file is hashed to represent the content, and the hashed value is used as the filename. If the content isn't updated between builds, then it receives the same filename. When the content is updated, then the filename is different. By doing this, deployed apps can "forever-cache" the build directory and take full advantage of content delivery networks (CDNs) and heavily caching files for faster apps.
hashFileNames: true