2021-10-11 12:57:54 +00:00
# Bridge
2021-10-11 16:37:38 +00:00
Experience Nuxt 3 features on existing Nuxt 2 projects.
2021-10-11 12:57:54 +00:00
2021-10-11 16:37:38 +00:00
::alert
2021-10-11 21:49:54 +00:00
If you're starting a fresh Nuxt 3 project, please skip this section and go to [Nuxt 3 Installation ](/getting-started/installation ).< br >
2021-10-11 16:37:38 +00:00
Learn more in [Introduction ](/getting-started/introduction ).
::
2021-10-11 12:57:54 +00:00
2021-10-11 21:49:54 +00:00
Bridge is a forward-compatibility layer that allows you to experience many of new Nuxt 3 features by simply installing and enabling a Nuxt module.
2021-10-11 12:57:54 +00:00
2021-10-11 21:49:54 +00:00
Using Nuxt Bridge, you can make sure your project is (almost) ready for Nuxt 3 and have the best developer experience without needing a major rewrite or risk breaking changes.
2021-10-11 12:57:54 +00:00
2021-10-11 16:37:38 +00:00
### Upgrade Nuxt 2
2021-10-11 12:57:54 +00:00
2021-10-11 21:49:54 +00:00
Remove any package lockfiles (`package-lock.json` and `yarn.lock` ) and use the latest `nuxt-edge` :
2021-10-11 12:57:54 +00:00
**package.json**
```diff
- "nuxt": "^2.15.0"
+ "nuxt-edge": "latest"
```
2021-10-11 21:49:54 +00:00
Then, reinstall your dependencies:
2021-10-11 12:57:54 +00:00
2021-10-11 16:37:38 +00:00
::code-group
```bash [Yarn]
yarn install
```
```bash [NPM]
npm install
```
::
2021-10-11 12:57:54 +00:00
2021-10-11 16:37:38 +00:00
::alert
2021-10-11 21:49:54 +00:00
Once the installation is complete, make sure both development and production builds are working as expected before proceeding.
2021-10-11 16:37:38 +00:00
::
2021-10-11 12:57:54 +00:00
2021-10-11 16:37:38 +00:00
### Install Nuxt Bridge
2021-10-11 12:57:54 +00:00
2021-10-11 16:37:38 +00:00
Install `@nuxt/bridge-edge` as a development dependency:
::code-group
```bash [Yarn]
2021-10-11 12:57:54 +00:00
yarn add --dev @nuxt/bridge@npm:@nuxt/bridge -edge
2021-10-12 19:58:42 +00:00
```
```bash [NPM]
npm install -D @nuxt/bridge@npm:@nuxt/bridge -edge
2021-10-11 12:57:54 +00:00
```
2021-10-11 16:37:38 +00:00
::
2021-10-18 13:54:55 +00:00
### Update your scripts
You will also need to update your scripts within your `package.json` to reflect the fact that Nuxt will now produce a Nitro server as build output.
#### Static target
If you have set `target: 'static'` in your `nuxt.config` then you need to ensure that you update your build script to be `nuxt generate` .
```json
{
"scripts": {
"build": "nuxt generate"
}
}
```
#### Server target
For all other situations, you can use the normal `nuxt build` command.
```json
{
"scripts": {
"build": "nuxt build",
"start" "node .output/server/index.mjs"
}
}
```
2021-10-11 16:37:38 +00:00
### Update `nuxt.config`
2021-10-11 12:57:54 +00:00
2021-10-11 21:49:54 +00:00
Please make sure to avoid any CommonJS syntax such as `module.exports` , `require` or `require.resolve` in your config file. It will soon be deprecated and unsupported.
2021-10-11 12:57:54 +00:00
2021-10-11 16:37:38 +00:00
You can use static `import` , dynamic `import()` and `export default` instead. Using TypeScript by renaming to `nuxt.config.ts` is also possible and recommended.
2021-10-11 12:57:54 +00:00
2021-10-13 08:58:28 +00:00
```ts [nuxt.config.js|ts]
2021-10-11 12:57:54 +00:00
import { defineNuxtConfig } from '@nuxt/bridge'
export default defineNuxtConfig({
// Your existing configuration
})
```
2021-10-13 20:01:50 +00:00
### Update `tsconfig.json`
If you are using TypeScript, you can edit your `tsconfig.json` to benefit from autogenerated Nuxt types:
**tsconfig.json**
```diff
{
+ "extends": "./.nuxt/tsconfig.json",
"compilerOptions": {
```
2021-10-11 16:37:38 +00:00
### Avoid CommonJS syntax
2021-10-11 12:57:54 +00:00
2021-10-11 22:47:43 +00:00
Nuxt 3 natively supports TypeScript and ECMAScript Modules.
2021-10-11 12:57:54 +00:00
2021-10-11 22:47:43 +00:00
#### Update the imports
::code-group
```js [Before]
const lib = require('lib')
```
```js [After]
import lib from 'lib'
// or using code-splitting
const lib = await import('lib').then(e => e.default || e)
```
::
#### Update the exports
::code-group
```js [Before]
module.exports = ...
```
```js [After]
export default ...
// or using named export
export const hello = ...
```
::
#### Avoid using specific CJS syntax
Avoid the usage of `__dirname` and `__filename` as much as possible.
2021-10-11 12:57:54 +00:00
2021-10-11 16:37:38 +00:00
### Remove incompatible and obsolete modules
2021-10-11 12:57:54 +00:00
2021-10-11 22:47:43 +00:00
- Remove `@nuxt/content` (1.x). A rewrite for nuxt 3 is planned (2.x)
2021-10-11 12:57:54 +00:00
- Remove `nuxt-vite` : Bridge enables same functionality
2021-10-13 08:56:59 +00:00
- Remove `@nuxt/typescript-build` : Bridge enables same functionality
- Remove `@nuxt/typescript-runtime` and `nuxt-ts` : Nuxt 2 has built-in runtime support
2021-10-11 12:57:54 +00:00
- Remove `@nuxt/nitro` : Bridge injects same functionality
2021-10-13 21:32:51 +00:00
- Remove `@nuxtjs/composition-api` from your dependencies (and from your modules in `nuxt.config` ). Bridge provides a legacy composition API layer that handles imports within your files from `@nuxtjs/composition-api` until you've fully finished migrating to native Bridge/Nuxt 3 composables (which you will import from by `#app` , or via auto-imports).
2021-10-11 12:57:54 +00:00
2021-10-13 19:04:46 +00:00
### Exclude Nuxt build folder from git
Add the folder `.output` to the `.gitignore` file.
2021-10-11 16:37:38 +00:00
### Ensure everything goes well
2021-10-11 12:57:54 +00:00
✔️ Try with `nuxt dev` and `nuxt build` (or `nuxt generate` ) to see if everything goes well.
2021-10-11 21:49:54 +00:00
🐛 Is something wrong? Please let us know by creating an issue. Also, you can easily disable bridge in the meantime:
2021-10-11 12:57:54 +00:00
2021-10-13 08:58:28 +00:00
```ts [nuxt.config.js|ts]
2021-10-11 12:57:54 +00:00
import { defineNuxtConfig } from '@nuxt/bridge'
export default defineNuxtConfig({
2021-10-11 21:49:54 +00:00
bridge: false // Temporarily disable bridge integration
2021-10-11 12:57:54 +00:00
})
```