Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/site/layouts/Blog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ const BlogLayout: FC = () => {
'announcements',
'release',
'vulnerability',
'migrations',
'events',
])}
/>
Expand Down
3 changes: 3 additions & 0 deletions apps/site/mdx/components.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict';

import AlertBox from '@node-core/ui-components/Common/AlertBox';
import BadgeGroup from '@node-core/ui-components/Common/BadgeGroup';
import Blockquote from '@node-core/ui-components/Common/Blockquote';
import MDXCodeTabs from '@node-core/ui-components/MDX/CodeTabs';
Expand Down Expand Up @@ -54,6 +55,8 @@ export default {
blockquote: Blockquote,
pre: MDXCodeBox,
img: MDXImage,
// Renders a CSS-enhanced Alert Box
AlertBox,
// Renders MDX CodeTabs
CodeTabs: MDXCodeTabs,
// Renders Tooltips
Expand Down
13 changes: 4 additions & 9 deletions apps/site/navigation.json
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,10 @@
"securityBestPractices": {
"link": "/learn/getting-started/security-best-practices",
"label": "components.navigation.learn.gettingStarted.links.securityBestPractices"
},
"userlandMigrations": {
"link": "/learn/getting-started/userland-migrations",
"label": "components.navigation.learn.gettingStarted.links.userlandMigrations"
}
}
},
Expand Down Expand Up @@ -336,15 +340,6 @@
}
}
},
"migrations": {
"label": "components.navigation.learn.migrations.links.migrations",
"items": {
"introduction": {
"link": "/learn/migrations/introduction",
"label": "components.navigation.learn.migrations.links.introduction"
}
}
},
"modules": {
"label": "components.navigation.learn.modules.links.modules",
"items": {
Expand Down
52 changes: 52 additions & 0 deletions apps/site/pages/en/blog/migrations/v12-to-v14.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
date: '2025-10-28T00:00:00.000Z'
category: migrations
title: Node.js v12 to v14
layout: blog-post
author: AugustinMauroy
---

# Node.js v12 to v14

<AlertBox level="info" title="!">
This article covers a part of the migration from Node.js v12 to v14. The
userland migrations team is working on more codemods to help you with the
migration.
</AlertBox>

This page provides a list of codemods to help you migrate your code from Node.js v12 to v14.

## `util-print-to-console-log`

This recipe transforms calls of various now-deprecated `node:util` log functions into the modern alternative, `console.log` and `console.error`:

- [DEP0026](https://nodejs.org/api/deprecations.html#DEP0026): `util.print` → `console.log`
- [DEP0027](https://nodejs.org/api/deprecations.html#DEP0027): `util.puts` → `console.log`
- [DEP0028](https://nodejs.org/api/deprecations.html#DEP0028): `util.debug` → `console.error`
- [DEP0029](https://nodejs.org/api/deprecations.html#DEP0029): `util.error` → `console.error`

The source code for this codemod can be found in the [util-print-to-console-log directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/util-print-to-console-log).

You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/util-print-to-console-log).

```bash
npx codemod run @nodejs/create-require-from-path
```

### Example:

```js displayName="Before"
const util = require('node:util');

util.print('Hello world');
util.puts('Hello world');
util.debug('Hello world');
util.error('Hello world');
```

```js displayName="After"
console.log('Hello world');
console.log('Hello world');
console.error('Hello world');
console.error('Hello world');
```
169 changes: 169 additions & 0 deletions apps/site/pages/en/blog/migrations/v14-to-v16.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
---
date: '2025-10-28T00:01:00.000Z'
category: migrations
title: Node.js v14 to v16
layout: blog-post
author: AugustinMauroy
---

# Node.js v14 to v16

<AlertBox level="info" title="!">
This article covers a part of the migration from Node.js v14 to v16. The
userland migrations team is working on more codemods to help you with the
migration.
</AlertBox>

This page provides a list of codemods to help you migrate your code from Node.js v14 to v16.

## `create-require-from-path`

Node.js v16 replaced the [`createRequireFromPath`](https://nodejs.org/api/module.html#module_module_createrequirefrompath) function, deprecated in [DEP0148](https://nodejs.org/api/deprecations.html#DEP0148), with the modern [`createRequire`](https://nodejs.org/api/module.html#module_module_createrequire) function. This codemod replaces calls of the deprecated function with the modern alternative mentioned.

The source code for this codemod can be found in the [create-require-from-path directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/create-require-from-path).

You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/create-require-from-path).

```bash
npx codemod run @nodejs/create-require-from-path
```

### Example:

```js displayName="Before"
import { createRequireFromPath } from 'node:module';

const requireFromPath = createRequireFromPath('/path/to/module');
const myModule = requireFromPath('./myModule.cjs');
```

```js displayName="After"
import { createRequire } from 'node:module';

const require = createRequire('/path/to/module');
const myModule = require('./myModule.cjs');
```

## `process-main-module`

The `process.mainModule` property was deprecated in favor of `require.main`. This codemod will help you replace the old `process.mainModule` usage with the new `require.main` usage.

So the codemod handle [DEP0138](https://nodejs.org/api/deprecations.html#DEP0138).

The source code for this codemod can be found in the [process-main-module directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/process-main-module).

You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/process-main-module).

```bash
npx codemod run @nodejs/process-main-module
```

### Example:

```js displayName="Before"
if (process.mainModule === 'mod.js') {
// cli thing
} else {
// module thing
}
```

```js displayName="After"
if (require.main === 'mod.js') {
// cli thing
} else {
// module thing
}
```

## `process-mainModule-to-require-main`

The [`process.mainModule`](https://nodejs.org/api/process.html#process_process_mainmodule) property was deprecated ([DEP0144](https://nodejs.org/api/deprecations.html#DEP0144)) in favor of [`require.main`](https://nodejs.org/api/modules.html#modules_accessing_the_main_module). This codemod replaces calls of the deprecated property with the modern alternative mentioned.

The source code for this codemod can be found in the [process-mainModule-to-require-main directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/process-main-module).

You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/process-mainModule-to-require-main).

```bash
npx codemod run @nodejs/process-mainModule-to-require-main
```

### Example:

```js displayName="Before"
if (process.mainModule) {
console.log('This script is the main module');
}
```

```js displayName="After"
if (require.main === module) {
console.log('This script is the main module');
}
```

## `rmdir`

The `fs.rmdir` function was deprecated in favor of `fs.rm` with the `{ recursive: true }` option. This codemod will help you replace the old `fs.rmdir` function with the new `fs.rm` function.

so this codemod handle [DEP0147](https://nodejs.org/api/deprecations.html#DEP0147).

The source code for this codemod can be found in the [rmdir directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/rmdir).

You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/rmdir).

```bash
npx codemod run @nodejs/rmdir
```

### Example:

```js displayName="Before"
// Using fs.rmdir with the recursive option
fs.rmdir(path, { recursive: true }, callback);

// Using fs.rmdirSync with the recursive option
fs.rmdirSync(path, { recursive: true });

// Using fs.promises.rmdir with the recursive option
fs.promises.rmdir(path, { recursive: true });
```

```js displayName="After"
// Using fs.rm with recursive and force options
fs.rm(path, { recursive: true, force: true }, callback);

// Using fs.rmSync with recursive and force options
fs.rmSync(path, { recursive: true, force: true });

// Using fs.promises.rm with recursive and force options
fs.promises.rm(path, { recursive: true, force: true });
```

## `tmpDir-to-tmpdir`

The `tmpDir` function was renamed to `tmpdir` in Node.js v16. This codemod will help you replace all instances of `tmpDir` with `tmpdir`.

So the codemod handles [DEP0022](https://nodejs.org/docs/latest/api/deprecations.html#dep0022-ostmpdir).

The source code for this codemod can be found in the [tmpdir-to-tmpdir directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/tmpdir-to-tmpdir).

You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/tmpDir-to-tmpdir).

```bash
npx codemod run @nodejs/tmpDir-to-tmpdir
```

### Example:

```js displayName="Before"
import { tmpDir } from 'node:os';

const foo = tmpDir();
```

```js displayName="After"
import { tmpdir } from 'node:os';

const foo = tmpdir();
```
43 changes: 43 additions & 0 deletions apps/site/pages/en/blog/migrations/v20-to-v22.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
date: '2025-10-28T00:02:00.000Z'
category: migrations
title: Node.js v20 to v22
layout: blog-post
author: AugustinMauroy
---

# Node.js v20 to v22

<AlertBox level="info" title="!">
This article covers a part of the migration from Node.js v20 to v22. The
userland migrations team is working on more codemods to help you with the
migration.
</AlertBox>

This page provides a list of codemods to help you migrate your code from Node.js v20 to v22.

## `import-assertions-to-attributes`

During the process of TC39 standardization, the `import assert` feature was introduced to allow importing [JSON modules](https://tc39.es/proposal-json-modules/), but during the during the transition to stage 4, the `assert` keyword was replaced with an `with` attribute on the `import` statement.

So in [node.js v22](https://nodejs.org/fr/blog/release/v22.0.0#other-notable-changes), the `import assert` feature was removed and the `with` attribute is required instead.

Also note that the `with` keyword as been introduce in [node.js v18.20](https://nodejs.org/fr/blog/release/v18.20.0#added-support-for-import-attributes) but it was not mandatory until v22.

The source code for this codemod can be found in the [import-assertions-to-attributes directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/import-assertions-to-attributes).

You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/import-assertions-to-attributes).

```bash
npx codemod run @nodejs/import-assertions-to-attributes
```

### Example:

```js displayName="Before"
import jsonData from './data.json' assert { type: 'json' };
```

```js displayName="After"
import jsonData from './data.json' with { type: 'json' };
```
Loading
Loading