@roots/bud-swc
Installation​
- npm
- Yarn
- pnpm
npm install @roots/bud-swc --save-dev
yarn add @roots/bud-swc --dev
pnpm add @roots/bud-swc --save-dev
Configuration​
@roots/bud-swc works with zero configuration. But there is a robust and developer friendly configuration API should you need to make a modification to the provided defaults.
Configuration with .swcrc​
Including a .swcrc config file in the root of your project will replace all default options.
This is not recommended if you want to use other extensions which manipulate swc options (like @roots/bud-react and @roots/bud-emotion).
Configuration with bud.swc​
You can configure jsc with the bud.swc.setJsc method:
bud.swc.setJsc({
baseUrl: `/base/url/`,
})
bud.swc.setJsc((jsc = {}) => ({
...jsc,
baseUrl: `/base/url/`,
}))
Many jsc options have associated helper methods which don't require using bud.swc.setJsc directly. These should be preferred over bud.swc.setJsc whenenver possible.
jsc.baseUrl​
Use the bud.swc.setBaseUrl method to configure jsc.baseUrl
bud.swc.setBaseUrl(`/base/url/`)
jsc.externalHelpers​
Use the bud.swc.setExternalHelpers method to configure jsc.externalHelpers
bud.swc.setExternalHelpers(true)
jsc.experimental​
Use the bud.swc.setExperimental method to configure jsc.experimental
bud.swc.setExperimental({plugins: []})
If you want to set jsc.experimental.plugins you may wish to use the bud.swc.setPlugins method.
jsc.loose​
Use the bud.swc.setLoose method to configure jsc.loose
bud.swc.setLoose(true)
jsc.minify​
Use the bud.swc.setMinify method to configure jsc.minify
bud.swc.setMinify(true)
jsc.parser​
To configure the parser you can use [bud.swc.setParser].
Example:
bud.swc.setParser({decorators: false})
Note that jsx.parser.syntax, jsc.parser.jsx and jsc.parser.tsx will be overwritten by syntax specific configuration. You should change those options using bud.swc.ecmascript.setParser or bud.swc.typescript.setParser instead of using the base options.
jsc.preserveAllComments​
Use the bud.swc.preserveAllComments method to oconfigure jsc.preserveAllComments
bud.swc.preserveAllComments(false)
jsc.target​
Use the bud.swc.setTarget method to configure jsc.target
bud.swc.setTarget(`es5`)
jsc.transform​
Use the bud.swc.setTransform method to configure jsc.transform
bud.swc.setTransform({})
Syntax specific jsc configuration​
SWC supports both ecmascript and TypeScript. If you want to make changes to the jsc config which are only applied to a specific syntax, you can make overrides using bud.swc.ecmascript and bud.swc.typescript, respectively.
bud.swc.ecmascript.setKeepClassNames(true)
bud.swc.typescript.setKeepClassNames(false)
All of the above jsc.* options work the same way as detailed above.
Plugins​
Use the bud.swc.setPlugins method to configure experimental.plugins:
bud.swc.setPlugins([['some-swc-plugin', {}]])
bud.swc.setPlugins((plugins = []) => [...plugins, ['some-swc-plugin', {}]])
Env​
Use the bud.swc.setEnv method to configure swc env options:
bud.swc.setEnv({
targets: `Chrome >= 48`,
})
Source maps​
Use the bud.swc.setSourceMaps method to configure the swc sourceMaps option:
bud.swc.setSourceMaps(`inline`)
Typechecking​
@roots/bud-swc does not currently support typechecking during compilation as swc does not natively support it yet.
Our recommendation is to run typechecking as a separate process. You can use tsc directly: tsc --noEmit.
You could also add the fork-ts-webpack-plugin.
Subscribe to swc-project/swc#571 for more information on where swc-project is at with its typecheck implementation.