You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bitburner-scripts/README.md

103 lines
3.7 KiB
Markdown

# Typescript template for Bitburner's Remote File API
2 years ago
The official template for synchronizing Typescript/Javascript from your computer to the game.
2 years ago
[Step by step install](BeginnersGuide.md)
2 years ago
[Docker install guide](DockerGuide.md) (optional)
[Learn more about Typescript](https://www.typescriptlang.org/docs/)
## About
This template uses the Typescript compiler and the Remote File API system to synchronize Typescript to your game.
Due to the usage of the RFA system, it works with Web and Electron (Steam) versions of the game.
## Prerequisites
[Node.js](https://nodejs.org/en/download/) is needed for compiling typescript and installing dependencies.
[See here for step by step installation](BeginnersGuide.md) if you'd like help with installing Node and/or connecting to the game.
Alternatively see [Docker install guide](DockerGuide.md) (optional) that installs nodejs and the Remote File API in an isolated container.
## Quick start
Download the template to your computer and install everything it requires:
2 years ago
```
2 years ago
git clone https://github.com/bitburner-official/typescript-template
cd typescript-template
2 years ago
npm i
2 years ago
```
### How to use this template
2 years ago
2 years ago
Write all your typescript source code in the `/src` directory
To autocompile and send changed files as you save, run `npm run watch` in a terminal.
Have it running in the background so that it all happens automatically.
For Bitburner to receive any files, you need to enter the port `npm run watch` logs to the terminal
in the Remote API section of the game settings, and press the connect button.
2 years ago
[See here for step by step installation](BeginnersGuide.md) if you'd like help with installing Node and/or connecting to the game.
Alternatively see [Docker install guide](DockerGuide.md) (optional) that installs nodejs and the Remote File API in an isolated container.
## Advanced
### Imports
2 years ago
2 years ago
To ensure both the game and typescript have no issues with import paths, your import statements should follow a few formatting rules:
2 years ago
- Paths must be absolute from the root of `src/`, which will be equivalent to the root directory of your home drive
- Paths must contain no leading slash
- Paths must end with no file extension
2 years ago
#### Examples:
2 years ago
2 years ago
To import `helperFunction` from the file `helpers.ts` located in the directory `src/lib/`:
2 years ago
```js
2 years ago
import { helperFunction } from "lib/helpers";
2 years ago
```
To import all functions from the file `helpers.ts` located in the `src/lib/` directory as the namespace `helpers`:
```js
2 years ago
import * as helpers from "lib/helpers";
2 years ago
```
To import `someFunction` from the file `main.ts` located in the `src/` directory:
```js
2 years ago
import { someFunction } from "main";
2 years ago
```
### Debugging
2 years ago
For debugging bitburner on Steam you will need to enable a remote debugging port. This can be done by rightclicking bitburner in your Steam library and selecting properties. There you need to add `--remote-debugging-port=9222` [Thanks @DarkMio]
### Using React
Some `ns` functions, like [`ns.printRaw()`](https://github.com/bitburner-official/bitburner-src/blob/dev/markdown/bitburner.ns.printraw.md) allows you to render React components into the game interface.
The game already exposes the `React` and `ReactDOM` objects globally, but in order to work with strongly typed versions in `.ts` files, you can use the included typings. To do this, use the following import:
`import React, { ReactDOM } from '@react'`
Support for jsx is also included, so if you use the `.tsx` file ending, you can do something like:
```ts
import { NS } from '@ns';
import React from '@react';
interface IMyContentProps {
name: string
}
const MyContent = ({name}: IMyContentProps) => <span>Hello {name}</span>;
export default async function main(ns: NS){
ns.printRaw(<MyContent name="Your name"></MyContent>);
}
```