Skip to main content

@babel/plugin-proposal-text-modules

Transforms import ... with { type: "text" } declarations to platform-specific API to read the imported file and decode it as UTF-8 text.

The transformation applied by this plugin depends on your top-level targets to detect whether the generated code should be compatible with Node.js, browsers, or both. When targeting Node.js, the generated code will also change depending on whether you are compiling modules to CommonJS or not.

caution

This plugin only transforms static import declarations, not dynamic import() calls, and when compiling modules it only supports CommonJS output.

Example​

input.js
import banner from "./banner.txt" with { type: "text" };

will be transformed to

output.js
const banner = await fetch(import.meta.resolve("./banner.txt")).then(r => r.text());

Namespace imports are also supported, and are compiled to an object with a single default property:

input.js
import * as ns from "./banner.txt" with { type: "text" };

Named imports are not valid for text modules, and will cause a compilation error.

Installation​

npm install --save-dev @babel/plugin-proposal-text-modules

Usage​

babel.config.json
{
"plugins": ["@babel/plugin-proposal-text-modules"]
}

Via CLI​

Shell
babel --plugins=@babel/plugin-proposal-text-modules script.js

Via Node API​

JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-proposal-text-modules"],
});

References​