Project Structure
nativescript.config.ts
The nativescript.config.ts
is a central place to configure your project. It allows you to configure your project structure, application id, runtime related flags and more.
Note about the .ts
extension
You can author the config file as plain .js
file as well, however we recommend sticking with the .ts
extension even if your project doesn't use TypeScript, because most editors will provide autocompletion in the .ts
file.
By default a config looks somewhat like the following
import { NativeScriptConfig } from '@nativescript/core'
export default {
id: 'org.nativescript.app',
appPath: 'app',
appResourcesPath: 'App_Resources',
android: {
v8Flags: '--expose_gc',
markingMode: 'none',
},
} as NativeScriptConfig
Configuration Reference
id
id: string = 'com.mycompany.myapp'
Controls the Application ID of your app, this setting can be overridden per platform via ios.id and android.id.
main
main: string = './src/custom-main.ts'
Sets the entry point to your app. This value is usually set in package.json in the main
field.
appPath
appPath: string = 'custom-src'
Specifies where your app source is located, usually src
or app
.
appResourcesPath
appResourcesPath: string = '../shared/app_resources'
Specifies where your app resources are located, usually App_Resources
.
webpackConfigPath
webpackConfigPath: string = 'custom-webpack.config.js'
Specifies the webpack config location. The default is webpack.config.js
in the root however you can use a custom name and place elsewhere.
profiling
profiling: 'counters' | 'timeline' | 'lifecycle' = "timeline"
Enable profiler logs. In most cases when profiling, you would use timeline
.
cssParser
cssParser: 'rework' | 'nativescript' | 'css-tree' = "css-tree"
Set the default CSS parser that NativeScript will use, by default it uses css-tree
.
ignoredNativeDependencies
ignoredNativeDependencies: string[] = ['@nativescript/imagepicker']
A list of npm package names to ignore when attaching native dependencies to the build.
cli
cli: Object = {}
See CLI Configuration Reference
android
android: Object = {}
See Android Configuration Reference
ios
ios: Object = {}
See iOS Configuration Reference
hooks
hooks: Array = []
See Hooks Configuration Reference
CLI Configuration Reference
cli.packageManager
Note
yarn2
is experimental and available in nativescript@8.5.0
or newer.
cli.packageManager: 'npm' | 'yarn' | 'pnpm' | 'yarn2' = 'yarn';
Sets the package manager to use for this project.
Defaults to the package manager set with the cli (ns package-manager set yarn
), or npm
if not set.
cli.pathsToClean
pathsToClean?: string[];
Overrides the files or paths to clean when running the ns clean
command.
cli.additionalPathsToClean
additionalPathsToClean?: string[];
Additional files or paths to clean when running the ns clean
command, the paths are appended to the default list of paths.
Android Configuration Reference
android.id
android.id: string = 'com.mycompany.myapp.android';
Controls the Application ID of your Android app, this setting overrides the value set in id.
See also ios.id.
android.discardUncaughtJsExceptions
android.discardUncaughtJsExceptions: boolean = true;
Discard any uncaught JS exceptions. This can be very useful in production environments where you don't want your app to crash in case an unexpected JS exception is thrown.
android.v8Flags
android.v8Flags: string = "--expose_gc --trace=true";
Flags passed to the v8 runtime. --expose_gc
is required for the runtime to function properly.
For a list of available v8 flags see this Gist.
android.codeCache
android.codeCache: boolean = true;
Enables the v8 code-cache.
android.gcThrottleTime
android.gcThrottleTime: number = 20; // in ms
Trigger a gc periodically (in ms
). Defaults to 0
(disabled).
android.markingMode
android.markingMode: 'none' | 'full';
Sets the default gc marking mode, defaults to none
. full
has been deprecated and it's not recommended.
android.handleTimeZoneChanges
android.handleTimeZoneChanges: boolean = true;
Notify the app when the timezone changes, defaults to false
.
android.maxLogcatObjectSize
android.maxLogcatObjectSize: number = 9999;
Sets the maximum lenght of a single output string. Defaults to 1024
.
android.forceLog
android.forceLog: boolean = true;
Enable logging in Release mode. Defaults to false
.
android.memoryCheckInterval
android.memoryCheckInterval: number; // in ms
Sets the frequency of the freeMemoryRatio
check.
android.freeMemoryRatio
android.freeMemoryRatio: number;
Percentage of memory (0.0
to 1.0
) before it forces a GC. Defaults to 0
(disabled).
When set, it also requires memoryCheckInterval to be set.
android.enableLineBreakpoints
android.enableLineBreakpoints: boolean;
Used for advanced debugging.
android.enableMultithreadedJavascript
android.enableMultithreadedJavascript: boolean;
Enable the multithreaded JavaScript engine. Defaults to false
.
iOS Configuration Reference
ios.id
ios.id: string = 'com.mycompany.myapp.ios';
Controls the Bundle Identifier of your iOS app, this setting overrides the value set in id.
See also android.id.
ios.discardUncaughtJsExceptions
ios.discardUncaughtJsExceptions: boolean = true;
Discard any uncaught JS exceptions. This can be very useful in production environments where you don't want your app to crash in case an unexpected JS exception is thrown.
ios.SPMPackages
Experimental
SPM packages are available in nativescript@8.5.0
or newer and are experimental.
ios.SPMPackages: Array<{
name: string;
libs: Array<string>;
repositoryURL: string;
version: string;
}>
Allows defining Swift Package Manager dependencies that should be installed into the project. Any dependencies listed here, similar to Cocoapods depependencies will be built with the project. This means you can generate typings for them via ns typings ios
for TypeScript usage.
Example
// ...
ios: {
SPMPackages: [
{
name: 'swift-numerics',
libs: ['Numerics'],
repositoryURL: 'https://github.com/apple/swift-numerics.git',
version: '1.0.0',
},
]
}
Hooks Configuration Reference
hooks: [
{
type: 'before-<hookName>' | 'after-<hookName>',
script: './path/to/script.js',
},
]
Allows defining project-persistent hooks.
Avaialable hooks (prefix with before-
or after-
):
buildAndroidPlugin
- Builds aar file for Android plugin, runs during prepareNativeAppbuildAndroid
- Builds Android appbuildIOS
- Builds iOS appcheckEnvironment
- Validate project env, runs during ns doctor, clean, and most build commandscheckForChanges
- Changes occurred during watchinstall
- Application installed to device/emulatorprepare
- Compiles webpack and prepares native app in platforms folderprepareNativeApp
- Preparing the actual native app, runs during prepare/watch hookresolveCommand
- Resolves command and arguments, runs before all cli commandswatch
- Setup watchers for live sync, runs during prepare hookwatchPatterns
- Setup watch patterns, runs during watch hook
- Previous
- main.(js|ts)
- Next
- package.json