Skip to main content
Version: 3.x

Compile configuration Details

sourceRoot#

string

Default: 'src'

Source code directory.

outputRoot#

string

Default: 'dist'

The production directory after the code is compiled.

designWidth#

number

Defalut value: 750

Design size, please see for detailsDesign and size unit

defineConstants#

object

Used to configure some global variables for use in the code.

The configuration method can be referred to Webpack DefinePlugin,for eaxmple:

/config/index.js
module.exports = {
// ...
defineConstants: {
A: '"a"' // JSON.stringify('a')
}
}

alias#

object

Used to configure directory aliases, thus facilitating the writing of code reference paths.

Use relative paths to write file references as follows.

import A from '../../componnets/A'
import Utils from '../../utils'
import packageJson from '../../package.json'
import projectConfig from '../../project.config.json'

To avoid writing multi-level relative paths, we can configure alias as follows.

module.exports = {
// ...
alias: {
'@/components': path.resolve(__dirname, '..', 'src/components'),
'@/utils': path.resolve(__dirname, '..', 'src/utils'),
'@/package': path.resolve(__dirname, '..', 'package.json'),
'@/project': path.resolve(__dirname, '..', 'project.config.json'),
}
}

With the above configuration, the src/components and src/utils directories can be configured as aliases, and the package.json and project.config.json files in the root directory can be configured as aliases, so that the references in the code are rewritten as follows.

import A from '@/components/A'
import Utils from '@/utils'
import packageJson from '@/package'
import projectConfig from '@/project'

In order for the editor (VS Code) to not report errors and continue to use the automatic path completion feature, you need to configure paths in jsconfig.json or tsconfig.json in the root of the project for the editor to recognize our alias in the following form.

{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/components/*": ["./src/components/*"],
"@/utils/*": ["./src/utils/*"],
"@/package": ["./package.json"],
"@/project": ["./project.config.json"],
}
}
}

It is recommended that aliases start with @/ rather than just @,as there is a small chance of naming conflicts with some npm packages of the scoped form.(eg:@tarojs/taro, @babel/core

env#

object

Used to set environment variables such as process.env.NODE_ENV.

Suppose we need to distinguish between development and production environments, which can be configured as follows.

config/dev.js

/config/dev.js
module.exports = {
// ...
env: {
NODE_ENV: '"development"' // JSON.stringify('development')
}
}

config/prod.js

config/prod.js
module.exports = {
// ...
env: {
NODE_ENV: '"production"' // JSON.stringify('production')
}
}

This allows the environment to be determined in the code by process.env.NODE_ENV === 'development'.

copy#

object

Used to copy files directly from the source code directory to the compiled production directory.

copy.patterns#

array

This is used to specify the files or directories to be copied, each of which must contain the from and to configurations, representing the source and the directory to be copied to, respectively. You can also set the ignore configuration to specify the files to be ignored. ignore is a string of type glob, or an array of glob strings.

Note that from must specify a file or directory that exists, glob format is not supported. from and to directly top the file directories in the project root, it is recommended that from starts with the src directory and to starts with the dist directory.

They are generally used in the following forms.

module.exports = {
// ...
copy: {
patterns: [
{ from: 'src/asset/tt/', to: 'dist/asset/tt/', ignore: ['*.js'] }, // Specify the directory to be copied
{ from: 'src/asset/tt/sd.jpg', to: 'dist/asset/tt/sd.jpg' } // Specify the files to be copied
]
}
}

copy.options#

object

Copy the configuration, you can specify the global ignore.

module.exports = {
// ...
copy: {
options: {
ignore: ['*.js', '*.css'] // global ignore
}
}
}

plugins#

array

Configure the Taro plugin.

When no parameters need to be passed to the plugin, the following writeup is equivalent.

module.exports = {
// ...
plugins: [
// 从本地绝对路径引入插件
'/absulute/path/plugin/filename',
// 引入 npm 安装的插件
'@tarojs/plugin-mock',
['@tarojs/plugin-mock'],
['@tarojs/plugin-mock', {}]
]
}

给插件传参:

module.exports = {
// ...
plugins: [
['@tarojs/plugin-mock', {
mocks: {
'/api/user/1': {
name: 'judy',
desc: 'Mental guy'
}
}
}]
]
}

presets#

array

A preset is a collection of Taro plugins with the same configuration syntax as plugins

module.exports = {
// ...
presets: [
// The set of plugins installed by npm
'@tarojs/preset-sth',
// The set of plugins installed by npm, and pass in the plugin parameters
['@tarojs/plugin-sth', {
arg0: 'xxx'
}],
// The plugin set is brought in from the local absolute path, and also if parameters need to be passed in as above
'/absulute/path/preset/filename',
]
}

terser#

object

Configure the terser tool to compress JS code.

terser.enable#

boolean

Default value true

Indicates if JS code compression is enabled.

terser.config#

object

The specific configuration of the terser.

module.exports = {
// ...
terser: {
enable: true,
config: {
// The configuration items are the same as https://github.com/terser/terser#minify-options
}
}
}

The terser configuration only works in production mode. If you are using watch mode and want to enable terser, then you need to set process.env.NODE_ENV to 'production'.

csso#

object

Configure the csso tool to compress CSS code.

csso.enable#

boolean

Default value true.

Indicates if CSS code compression is enabled.

csso.config#

object

The specific configuration of csso.

module.exports = {
// ...
csso: {
enable: true,
config: {
// The configuration items are the same as https://github.com/css/csso#minifysource-options
}
}
}

The csso configuration only works in production mode. If you are using watch mode and want to enable csso, then you need to set process.env.NODE_ENV to 'production'.

sass#

object

Used to control the compilation behavior of scss code, by default dart-sass is used, the specific configuration can be found in sass.

When it is necessary to insert scss code into the headers of all scss files, this can be set with three additional parameters.

sass.resource#

string | array

The absolute path to the scss file that needs to be globally injected. If multiple files are to be introduced, passing in an array is supported.

Passing in relative paths is supported when there is a projectDirectory configuration exists, relative paths are only supported.

sass.projectDirectory#

string

The absolute address of the project root directory (if it is an mini-program cloud development template, it should be the client directory).

sass.data#

string

Global scss variables, if the same variables are set in data and resource, then data takes precedence over resource.

Example of global injection of scss#

Single file path form#

When only the resource field is available, the absolute path to the scss file can be passed.

module.exports = {
// ...
sass: {
resource: path.resolve(__dirname, '..', 'src/styles/variable.scss')
}
}

Multiple file path form#

In addition, when only the resource field is available, an array of paths can be passed in.

module.exports = {
// ...
sass: {
resource: [
path.resolve(__dirname, '..', 'src/styles/variable.scss'),
path.resolve(__dirname, '..', 'src/styles/mixins.scss')
]
}
}

Specify the project root path form#

You can additionally configure the projectDirectory field so that you can write relative paths in resource.

module.exports = {
// ...
sass: {
resource: [
'src/styles/variable.scss',
'src/styles/mixins.scss'
],
projectDirectory: path.resolve(__dirname, '..')
}
}

Pass in the scss variable string#

The $nav-height variable declared in data has the highest priority.

module.exports = {
// ...
sass: {
resource: [
'src/styles/variable.scss',
'src/styles/mixins.scss'
],
projectDirectory: path.resolve(__dirname, '..'),
data: '$nav-height: 48px;'
}
}

mini#

object

Dedicated mini program configuration.

mini.baseLevel#

number

Default value: 16

For mini-program where template templates do not support recursion (e.g. WeChat, QQ, Jingdong), Taro will loop baseLevel times for all templates to support recursive calls to similar templates.

However, looping too many times can result in a rather large base template, so you can use the baseLevel configuration item to configure fewer loop levels when your nesting level is not too deep.

Of course, when the nesting level is deep, you can also increase the baseLevel to avoid some problems when you reach the loop limit and Taro calls a custom component to restart the loop.

mini.compile#

object

The configuration related to the compilation process of the mini program

mini.compile.exclude#

array

Configure the mini program compilation process to exclude files that do not need to be compiled by Taro, the array can contain specific file paths or can be a judgment function, same as Rule.exclude.

Assuming that a file is to be excluded, the specific path of the file to be excluded can be configured as follows.

module.exports = {
// ...
mini: {
// ...
compile: {
exclude: [
path.resolve(__dirname, '..', 'src/pages/index/vod-wx-sdk-v2.js')
]
}
}
}

It is also possible to configure the judgment function.

module.exports = {
// ...
mini: {
// ...
compile: {
exclude: [
modulePath => modulePath.indexOf('vod-wx-sdk-v2') >= 0
]
}
}
}

mini.compile.include#

array

Configure additional files that need to be compiled by Taro in the same way as [mini.compile.exclude](. /config-detail#minicompileexclude) in the same way as Rule.include.

For example, Taro does not compile files in node_modules by default, you can use this configuration to make Taro compile files in node_modules.

mini.webpackChain#

function

Customize the Webpack configuration.

This function receives three arguments. The first argument is the webpackChain object, which can be modified by referring to the webpack-chain API, the second argument is the webpack instance, and the third argument PARSE_AST_ TYPE is the set of file types that the mini program is compiled with.

The third parameter takes the following values:

export enum PARSE_AST_TYPE {
ENTRY = 'ENTRY',
PAGE = 'PAGE',
COMPONENT = 'COMPONENT',
NORMAL = 'NORMAL',
STATIC = 'STATIC'
}

Example:

// This is an example of adding a raw-loader to directly reference an md file in a project
module.exports = {
// ...
mini: {
// ...
webpackChain (chain, webpack) {
chain.merge({
module: {
rule: {
myloader: {
test: /\.md$/,
use: [{
loader: 'raw-loader',
options: {}
}]
}
}
}
})
}
}
}
// This is an example of adding a plugin
module.exports = {
// ...
mini: {
// ...
webpackChain (chain, webpack) {
chain.merge({
plugin: {
install: {
plugin: require('npm-install-webpack-plugin'),
args: [{
// Use --save or --save-dev
dev: false,
// Install missing peerDependencies
peerDependencies: true,
// Reduce amount of console logging
quiet: false,
// npm command used inside company, yarn is not supported yet
npm: 'cnpm'
}]
}
}
})
}
}
}

mini.output#

object

The output option that can be used to modify and extend Webpack, the configuration items refer to documentation

mini.enableSourceMap#

boolean

Default value: true in watch mode, otherwise false.

Used to control whether to generate sourceMap corresponding to js, css.

mini.sourceMapType#

string

Default value: 'cheap-module-source-map'

Detail configuration refer to Webpack devtool configuration

mini.debugReact#

Supported since v3.0.8

boolean

Default value: false.

Specifies whether the code related to the React framework uses the development environment (uncompressed) code, the default is to use the production environment (compressed) code.

mini.minifyXML#

Supported since v3.0.8

object

About the configuration related to compressing mini program xml files.

mini.minifyXML.collapseWhitespace#

boolean

Default value: false.

If or not to merge spaces in the xml file.

mini.postcss#

object

Configure postcss related plugins.

module.exports = {
// ...
mini: {
// ...
postcss: {
// The autoprefixer configuration can be performed. configuration items refer to documentation https://github.com/postcss/autoprefixer
autoprefixer: {
enable: true,
config: {
// autoprefixer configuration items
}
},
pxtransform: {
enable: true,
config: {
// pxtransform configuration items
selectorBlackList: ['body']
}
},
// mini program styles referencing local resources inline
url: {
enable: true,
config: {
limit: 10240 // Set upper limit of conversion size
}
},
// css modules function switches and related configuration
cssModules: {
enable: false, // Default is false, if you want to use the css modules function, set it to true
config: {
generateScopedName: '[name]__[local]___[hash:base64:5]'
}
}
}
}
}

mini.commonChunks#

array | function

Used to tell the Taro compiler which public files it needs to extract, supports two types of configuration.

The configuration value of commonChunks based on the name of the common chunks in the webpack configuration optimization.runtimeChunk and optimization.splitChunks . Default value of webpack.optimization configuration in Taro Source Code

If you need to split public files by yourself, please override the optimization.runtimeChunk and optimization.splitChunks via webpackChain configuration to override the optimization.runtimeChunk and optimization.splitChunks configurations. Then specify the public entry file with this commonChunks configuration.

String Array Approach#

Default values for common compilation: ['runtime', 'vendors', 'taro', 'common']

Default values when compiling as a WeChat mini program plugin: ['plugin/runtime', 'plugin/vendors', 'plugin/taro', 'plugin/common']

You can pass in an array of names of public files that need to be extracted.

Example:

module.exports = {
// ...
mini: {
// ...
commonChunks: ['runtime', 'vendors', 'taro', 'common']
}
}

These public files represent.

  • runtime: webpack runtime entry
  • taro: Taro-related dependencies in node_modules
  • vendors: public dependencies of node_modules other than Taro
  • common: common logic for business code in the project

Function method#

The configuration is performed by manipulating the default public file array of the input parameters and returning a new array as follows:

module.exports = {
// ...
mini: {
// ...
commonChunks (commonChunks) {
// The value of commonChunks is the default array of public filenames
commonChunks.push('yourCustomCommonChunkName')
return commonChunks
}
}
}

mini.addChunkPages#

function

Specify the public files that need to be referenced separately for certain pages.

For example, when using mini program sub-packaging, in order to reduce the size of the main package, the sub-packaged pages want to introduce their own public files and don't want to put them directly inside the main package. Then we can first use the webpackChain configuration to abstract the public files of the sub-package separately, and then configure the introduction of the public files of the sub-package via mini.addChunkPages for the sub-package page, which is used in the following way.

mini.addChunkPages is configured as a function that accepts two parameters

  • pages parameter is of type Map, which is used to add public files to the page
  • the pagesNames parameter is a list of all page identifiers for the current application, which can be printed to see the page identifiers

For example, to add eating and morning to the pages/index/index page, the following two public files are extracted.

module.exports = {
// ...
mini: {
// ...
addChunkPages (pages: Map<string, string[]>, pagesNames: string[]) {
pages.set('pages/index/index', ['eating', 'morning'])
}
}
}

mini.optimizeMainPackage#

object

Optimize the size of the main package

After a simple configuration like the following, you can avoid that modules not introduced in the main package are not extracted into commonChunks, this function will analyze the dependencies of modules and chunks during packaging, filter out the modules not referenced in the main package to extract it into the sub-package, the following are the two types of sub-package public modules extracted.

  • sub-package root/sub-vendors.(js|wxss)

    • If the module is only referenced by multiple pages within a single subpackage, it is extracted to the sub-vendors file in the root of that subpackage.
  • sub-package root/sub-common/*. (js|wxss)

    • If the module is referenced by pages in multiple sub-packages, it will normally be extracted to the public module of the main package, but here, to ensure the optimal size of the main package, it will first be extracted to a public module, and then copied to the sub-common folder of the corresponding sub-package (because the mini program cannot introduce files across sub-packages, so here you need to make a copy of each sub-package) It is important to note that this will result in a larger size of the total package.
module.exports = {
// ...
mini: {
// ...
optimizeMainPackage: {
enable: true
}
}
}

If there is a module that does not want to go through the sub-package extraction rules, you can configure it in exclude so that the module will go through the original extraction scheme and be extracted into the main package, like the following (absolute paths and functions are supported).

module.exports = {
// ...
mini: {
// ...
optimizeMainPackage: {
enable: true,
exclude: [
path.resolve(__dirname, 'moduleName.js'),
(module) => module.resource.indexOf('moduleName') >= 0
]
}
}
}

mini.styleLoaderOption#

object

Additional configuration of style-loader, configuration items refer to documentation,eg:

module.exports = {
// ...
mini: {
// ...
styleLoaderOption: {
insertAt: 'top'
}
}
}

mini.cssLoaderOption#

object

Additional configuration of css-loader, configuration items refer to documentation,eg:

module.exports = {
// ...
mini: {
// ...
cssLoaderOption: {
localIdentName: '[hash:base64]'
}
}
}

mini.sassLoaderOption#

object

Additional configuration of sass-loader, configuration items refer to documentation, eg:

module.exports = {
// ...
mini: {
// ...
sassLoaderOption: {
implementation: require("node-sass")
}
}
}

mini.lessLoaderOption#

Supported since v3.0.26

object

Additional configuration of less-loader, configuration items refer to documentation,eg:

module.exports = {
// ...
mini: {
// ...
lessLoaderOption: {
lessOptions: {
strictMath: true,
noIeCompat: true
}
}
}
}

mini.stylusLoaderOption#

object

Additional configuration of stylus-loader, configuration items refer to documentation

mini.miniCssExtractPluginOption#

object

Additional configuration of mini-css-extract-plugin, configuration items refer to documentation

module.exports = {
// ...
mini: {
// ...
miniCssExtractPluginOption: {
filename: '[name].css',
chunkFilename: '[name].css'
}
}
}

mini.imageUrlLoaderOption#

object

The url-loader configuration for png | jpg | jpeg | gif | bpm | svg files. The configuration items refer to documentation

mini.mediaUrlLoaderOption#

object

The url-loader configuration for mp4 | webm | ogg | mp3 | wav | flac | aac files. The configuration items refer to documentation,eg:

module.exports = {
// ...
mini: {
// ...
mediaUrlLoaderOption: {
limit: 8192
}
}
}

mini.fontUrlLoaderOption#

object

The url-loader configuration for woff | woff2 | eot | ttf | otf files. The configuration items refer to documentation

h5#

H5-specific configuration.

h5.entry#

object

The input option can be used to modify and extend Webpack documentation

module.exports = {
// ...
h5: {
// ...
entry: {
home: ['./home.js'],
about: ['./about.js'],
contact: ['./contact.js']
}
}
}

h5.output#

object

The output option that can be used to modify and extend Webpack, the configuration items refer to documentation

module.exports = {
// ...
h5: {
// ...
output: {
filename: 'js/[name].[hash:8].js',
chunkFilename: 'js/[name].[chunkhash:8].js'
}
}
}

h5.publicPath#

string

Defalut value: '/'

Set the directory where the output parsed files are to be sent.

h5.staticDirectory#

string

Defalut value: 'static'

h5 Compiled static files directory.

h5.chunkDirectory#

string

Defalut value: 'chunk'

The directory where the non-entry js files are stored after compilation, mainly affecting the path to dynamically introduced pages.

h5.devServer#

object

Preview the configuration of the service, you can change parameters such as ports. Specific configuration reference webpack-dev-server

Example:

修改端口:

module.exports = {
// ...
h5: {
// ...
devServer: {
port: 10086
}
}
}

Enable https service

module.exports = {
// ...
h5: {
// ...
devServer: {
https: true
}
}
}

h5.webpackChain#

function

Customize the Webpack configuration.

This function receives two arguments, the first one is the webpackChain object, which can be modified by referring to the webpack-chain API, and the second argument is the webpack instance.

例子:

// This is an example of adding a raw-loader to directly reference an md file in a project
module.exports = {
// ...
h5: {
// ...
webpackChain (chain, webpack) {
chain.merge({
module: {
rule: {
myloader: {
test: /\.md$/,
use: [{
loader: 'raw-loader',
options: {}
}]
}
}
}
})
}
}
}
// This is an example of adding a plugin
module.exports = {
// ...
h5: {
// ...
webpackChain (chain, webpack) {
chain.merge({
plugin: {
install: {
plugin: require('npm-install-webpack-plugin'),
args: [{
// Use --save or --save-dev
dev: false,
// Install missing peerDependencies
peerDependencies: true,
// Reduce amount of console logging
quiet: false,
// npm command used inside company, yarn is not supported yet
npm: 'cnpm'
}]
}
}
})
}
}
}

h5.router#

object

Routing related configuration.

h5.router.mode#

'hash' | 'browser'

Default value: 'hash'

Configure the routing mode.' hash' and 'browser' correspond to hash routing mode and browser history routing mode, respectively.

Example:

module.exports = {
// ...
h5: {
// ...
router: {
mode: 'hash' // or 'browser'
}
}
}

For the above configuration, after calling Taro.navigateTo({ url: '/pages/index/index' }), the browser address bar will be changed to:

  • https://{{domain}}/#/pages/index/indexhash mode)
  • https://{{domain}}/pages/index/indexbrowser mode)

h5.router.basename#

string

Configure the routing base path.

例子:

module.exports = {
// ...
h5: {
// ...
router: {
basename: '/myapp'
}
}
}

For the above configuration, after calling Taro.navigateTo({ url: '/pages/index/index' }), the browser address bar will be changed to:

  • https://{{domain}}/#/myapp/pages/index/indexhash mode)
  • https://{{domain}}/myapp/pages/index/indexbrowser mode)

h5.router.customRoutes#

object

Configure custom routes.

例子:

module.exports = {
// ...
h5: {
// ...
router: {
customRoutes: {
'/pages/index/index': '/index'
}
}
}
}

For the above configuration, after calling Taro.navigateTo({ url: '/pages/index/index' }), the browser address bar will be changed to

  • https://{{domain}}/#/indexhash mode)
  • https://{{domain}}/myapp/indexbrowser mode)

h5.enableSourceMap#

boolean

Default value: true in watch mode, otherwise false.

Used to control whether to generate sourceMap corresponding to js, css.

h5.sourceMapType#

string

Default value: 'cheap-module-eval-source-map'

Detail configuration refer to Webpack devtool configuration

h5.useHtmlComponents#

Taro 3.2.4 started to support

boolean

Default value: false

Used to control whether to use the compatibility component library on the H5 side, for details see [React Compatibility Component Library](./h5#React Compatibility Component Library)。

h5.enableExtract#

boolean

Default value: false in watch mode, otherwise true.

The extract function switch, when turned on, will use mini-css-extract-plugin to separate css files, which can be configured via h5.miniCssExtractPluginOption to configure the plugin.

h5.esnextModules#

array

The configuration requires additional modules compiled via Taro's preset postcss.

Suppose that the style units in taro-ui need to be adapted for conversion.

module.exports = {
// ...
h5: {
// ...
// After this configuration, the style files introduced in the code under the `node_modules/taro-ui/` path will be compiled by postcss.
esnextModules: ['taro-ui']
}
}

h5.postcss#

object

configure postcss related plugins.

h5.postcss.autoprefixer#

object

The autoprefixer configuration can be performed. The configuration items refer to the documentation, eg:

module.exports = {
// ...
h5: {
// ...
postcss: {
autoprefixer: {
enable: true,
config: {
/* autoprefixer configuration item */
}
}
}
}
}

h5.postcss.pxtransform#

object

Configuration of pxtransform can be done. Configuration items refer to documentation, eg:

module.exports = {
// ...
h5: {
// ...
postcss: {
pxtransform: {
enable: true,
config: {
/* pxtransform configuration item */
}
}
}
}
}

h5.postcss.cssModules#

object

CSS Modules can be configured as follows.

module.exports = {
// ...
h5: {
// ...
postcss: {
// css modules function switches and related configuration
cssModules: {
enable: false, // default is false, if you want to use the css modules function, set it to true
config: {
namingPattern: 'module',
generateScopedName: '[name]__[local]___[hash:base64:5]'
}
}
}
}
}

h5.styleLoaderOption#

object

Additional configuration for style-loader. configuration item reference documentation, eg:

module.exports = {
// ...
h5: {
// ...
styleLoaderOption: {
insertAt: 'top'
}
}
}

h5.cssLoaderOption#

object

Additional configuration for css-loader. configuration item reference documentation, eg:

module.exports = {
// ...
h5: {
// ...
cssLoaderOption: {
localIdentName: '[hash:base64]'
}
}
}

h5.sassLoaderOption#

object

Additional configuration for sass-loader. configuration item reference documentation, eg:

module.exports = {
// ...
h5: {
// ...
sassLoaderOption: {
implementation: require("node-sass")
}
}
}

h5.lessLoaderOption#

Supported since v3.0.26

object

Additional configuration for less-loader. configuration item reference documentation, eg:

module.exports = {
// ...
h5: {
// ...
lessLoaderOption: {
lessOptions: {
strictMath: true,
noIeCompat: true
}
}
}
}

h5.stylusLoaderOption#

object

Additional configuration for stylus-loader. configuration item reference documentation

h5.miniCssExtractPluginOption#

object

Additional configuration for mini-css-extract-plugin, effective if h5.enableExtract configuration is true.

configuration item reference documentation, eg:

module.exports = {
// ...
h5: {
// ...
miniCssExtractPluginOption: {
filename: 'css/[name].css',
chunkFilename: 'css/[id].css'
}
}
}

h5.imageUrlLoaderOption#

object

The url-loader configuration for png | jpg | jpeg | gif | bpm | svg files. configuration item reference [documentation], eg:

h5.mediaUrlLoaderOption#

object

The url-loader configuration for mp4 | webm | ogg | mp3 | wav | flac | aac files.configuration item reference [documentation], eg:

module.exports = {
// ...
h5: {
// ...
mediaUrlLoaderOption: {
limit: 8192
}
}
}

h5.fontUrlLoaderOption#

object

The url-loader configuration for woff | woff2 | eot | ttf | otf files. Refer to the documentation for the configuration items.

rn#

Configure exclusively for RN.

rn.appName#

string

Set the name of the registered application in the RN bundle

module.exports = {
// ...
rn: {
// ...
appName: 'TaroDemo'
}
}

rn.entry#

string

Entry uses the module lookup rule {name}. {platform}. {ext} to automatically distinguish between platforms

module.exports = {
// ...
rn: {
// ...
entry: 'index.android.tsx'
}
}

rn.output#

object

Set the output path of the bundle generated by Metro packaging, the default dist directory

module.exports = {
// ...
rn: {
// ...
output: {
iosSourceMapUrl: '', // sourcemap file url
iosSourcemapOutput: '../taro-native-shell/ios/main.map', // sourcemap file output path
iosSourcemapSourcesRoot: '', // The root directory when converting sourcemap resource paths to relative paths
androidSourceMapUrl: '',
androidSourcemapOutput: '../taro-native-shell/android/app/src/main/assets/index.android.map',
androidSourcemapSourcesRoot: '',
ios: '../taro-native-shell/ios/main.jsbundle',
iosAssetsDest: '../taro-native-shell/ios',
android: '../taro-native-shell/android/app/src/main/assets/index.android.bundle',
androidAssetsDest: '../taro-native-shell/android/app/src/main/res'
},
}
}

rn.postcss#

object

postcss related configuration, other style languages preprocessed after this configuration.

module.exports = {
// ...
rn: {
// ...
postcss: {
// postcss 配置,参考 https://github.com/postcss/postcss#options
options: { /* ... */ },
// 默认true,控制是否对 css value 进行 scalePx2dp 转换,pxtransform配置 enable 才生效
scalable: boolean,
pxtransform: {
enable: boolean, // 默认true
config: { /* ... */ } // 插件 pxtransform 配置项,参考尺寸章节
},
},
}
}

rn.sass#

object

sassrelated configurations. options configuration item reference documentation

module.exports = {
// ...
rn: {
// ...
sass: {
options: { /* ... */ },
// 加入到脚本注入的每个 sass 文件头部,在 config.sass 之前
additionalData: '', // {String|Function}
}
}
}

rn.less#

object

less related configurations. options configuration item reference documentation

module.exports = {
// ...
rn: {
// ...
less: {
options: { /* ... */ },
additionalData: '', // {String|Function}
}
}
}

rn.stylus#

object

stylus related configurations. stylus.options configuration item reference documentation

module.exports = {
// ...
rn: {
// ...
stylus: {
options: { /* ... */ },
additionalData: '', // {String|Function}
}
}
}

rn.resolve#

object

resolve handles the configuration of dependency files. resolve.include can be configured with multiple arrays of npm package names, treating npm packages as project files, supporting node_modules platform priority file access and global styles.

module.exports = {
// ...
rn: {
// ...
resolve: {
// ...
include: ['taro-ui'] // Handles cross-platform handling of references to node_modules/test files.
}
}
}

rn.enableMultipleClassName#

boolean

Support multiple className conversions, end with classname or style, extract the prefix, and then generate the corresponding xxxStyle according to the prefix. e.g. barClassName -> barStyle. Default value false, not enabled.

module.exports = {
rn: {
enableMultipleClassName: false
}
}

rn.enableMergeStyle#

boolean

Convert to object when the tag style property value is an array. Default value false, not enabled.

module.exports = {
rn: {
enableMergeStyle: false // https://github.com/shinken008/babel-plugin-jsx-attributes-array-to-object#example
}
}