When I import
node:process it works fine. However, when I try to require the same, it gives an error.
This works fine:
import process from 'node:process';
But when I try to require the same, it throws an error:
const process = require('node:process');
Error: Cannot find module 'node:process'
I am curious as to what is the difference between
process, which works in both, commonjs and module, vs
Also, a follow-up, I am using webpack to bundle my js, and I discovered this error when I tried to run my bundled code and realised, that
node:tty. How do I solve that now?
Juan Pablo Isaza
import process from 'node:process'; and
import process from 'process'; are equivalent.
node: exists since version 12 for
node:URLs are supported as an alternative means to load Node.js builtin modules. This URL scheme allows for builtin modules to be referenced by valid absolute URL strings.
The idea behind
node: is to make clear that it is actually a buildin module and not one installed and to avoid name conflicts, with 3rd party modules.
node: protocol was first added only for
import so a particular node version might support
import but not with
In v16.13.0 (not sure since which v16 version) you can also use it with
require. And was also backported to v14 since v14.18: module: add support for node:‑prefixed require(…) calls
"node:" is an URL scheme for loading ECMAScript modules. As such it started for "import", not "require".
"node:process" is just an alternative name to load the built-in "process" module.
See also Node.js documentation - you can find the lowest supporting Node.js version inside the "History" tag (12.20.0, 14.13.1)
With newer Node.js it should be available for "require" as well (14.18.0, 16.0.0).
Some more details can be found here: node:process always prefers the built-in core module, while process could be loaded from a file.