@equinor/fusion-imports

中文文档
2.0.8发布于 2026/11/12ISCTypeScriptES Module近 30 天下载 1.1万

Package import files and configurations

原始使用文档
文档目录10 节
  1. Installation
  2. When to use
  3. Quick start
  4. API
  5. importConfig<C>(basename, options?)
  6. importScript<M>(entryPoint, options?)
  7. importJSON<T>(filePath, encoding?)
  8. resolveConfigFile(baseName, options?)
  9. Plugins
  10. Error handling

@equinor/fusion-imports

Utilities for importing and transpiling TypeScript, JavaScript, and JSON configuration files at Node.js runtime using esbuild.

[!IMPORTANT] This package works with file paths, not URLs. It is designed for loading configuration scripts at runtime in Node.js CLI tools and build pipelines.

Installation

pnpm add @equinor/fusion-imports

When to use

ScenarioFunction
Load a config by basename, auto-resolving .ts → .js → .jsonimportConfig
Bundle & import a single TypeScript/JS module at runtimeimportScript
Read and parse a JSON file from diskimportJSON
Find the first accessible config file for a basenameresolveConfigFile

Quick start

import { importConfig } from '@equinor/fusion-imports';

interface AppSettings {
  name: string;
  port: number;
}

// Resolves app.config.ts → app.config.js → app.config.json
const { config, path } = await importConfig<AppSettings>('app.config');
console.log(`Loaded ${path}:`, config);

API

importConfig<C>(basename, options?)

Resolves a configuration file by basename, probing extensions in order (.ts, .mjs, .js, .json). JSON files are parsed directly; script files are bundled with esbuild and dynamically imported.

import { importConfig } from '@equinor/fusion-imports';

interface MyConfig {
  name: string;
  bar: { foobar: number };
}

interface ScriptModule {
  generateConfig: (options: { env: string }) => MyConfig;
}

const { config } = await importConfig<MyConfig, ScriptModule>('my-config', {
  script: {
    resolve: (module) => module.generateConfig({ env: 'production' }),
  },
});

By default the module's default export is used as the config value. Provide script.resolve to extract a different export or call a factory function.

Options

OptionTypeDescription
baseDirstringBase directory for file resolution (default: process.cwd())
extensionsstring[]Extensions to probe (default: ['.ts', '.mjs', '.js', '.json'])
script.resolve(module) => CExtracts the config value from the imported module
script.esBuildOptionsImportScriptOptionsEsbuild overrides forwarded to importScript

importScript<M>(entryPoint, options?)

Bundles a TypeScript or JavaScript file with esbuild (ESM, external packages) and dynamically imports the output. Two built-in esbuild plugins are included automatically:

  • importMetaResolvePlugin — resolves import.meta.resolve() calls for relative paths at build time.
  • rawMarkdownPlugin — supports ?raw imports for .md / .mdx files.
import { importScript } from '@equinor/fusion-imports';

interface Greeting { greet(name: string): string }
const mod = await importScript<Greeting>('./greet.ts');
console.log(mod.greet('World'));

Esbuild customisation

ImportScriptOptions inherits all esbuild.BuildOptions except entryPoints, bundle, and format. You can pass custom plugins, define aliases, or change the output directory:

import { importScript } from '@equinor/fusion-imports';
import alias from 'esbuild-plugin-alias';

const mod = await importScript('./entry.ts', {
  plugins: [alias({ '@app': './src' })],
  outfile: '/tmp/bundle.js',
});

importJSON<T>(filePath, encoding?)

Reads a JSON file from disk and returns the parsed content. Throws with the original error as cause if the file is unreadable or contains invalid JSON.

import { importJSON } from '@equinor/fusion-imports';

interface Manifest { name: string; version: string }
const manifest = await importJSON<Manifest>('./package.json');

resolveConfigFile(baseName, options?)

Returns the absolute path of the first accessible configuration file matching the given basename and extension list. Useful when you need the path without importing the file.

import { resolveConfigFile } from '@equinor/fusion-imports';

const configPath = await resolveConfigFile('app.config', {
  baseDir: '/project',
  extensions: ['.ts', '.json'],
});

Plugins

rawMarkdownPlugin(options?)

Esbuild plugin that intercepts ?raw imports for markdown files and returns their content as a default-exported string. Included automatically by importScript.

// In a file bundled by importScript:
import readme from '../../README.md?raw';
console.log(readme); // raw markdown string

createImportMetaResolvePlugin()

Esbuild plugin that replaces import.meta.resolve('./relative') calls with resolved file:// URLs at build time. Included automatically by importScript.

Error handling

The package provides two error classes for filesystem failures:

ErrorThrown when
FileNotFoundErrorFile does not exist (ENOENT)
FileNotAccessibleErrorFile exists but cannot be read (EACCES, EISDIR)

Both extend Error and attach the original Node.js error as cause:

import { importConfig, FileNotFoundError } from '@equinor/fusion-imports';

try {
  await importConfig('missing');
} catch (error) {
  if (error instanceof FileNotFoundError) {
    console.error('Config not found:', error.message);
  }
}

版本与发布记录

@equinor/fusion-imports 共发布 38 个版本,首次发布于 2025/03/27;过去 12 个月发布了 22 个版本。

版本发布日期距今
2.0.8latest2026/11/121 天前
2.0.8-next.0next2026/11/112 天前
2.0.72026/10/1727 天前
2.0.7-trusted-publishing-20261015-9dfe7602cd2a49a8a9df00d62c26e7304a82a85atrusted-publishing-202610152026/10/1629 天前
2.0.62026/10/121 个月前
2.0.52026/09/291 个月前

其他发布通道:apploader → 1.1.1-apploader-be21a6b60eb13eee8bf869e75002d8634e9c50a9,cli-search-index → 1.1.7-cli-search-index.0,msal-v5 → 1.1.11-msal-v5.0,trusted-publishing-20261015 → 2.0.7-trusted-publishing-20261015-9dfe7602cd2a49a8a9df00d62c26e7304a82a85a,next → 2.0.8-next.0。

关于 @equinor/fusion-imports 的常见问题

@equinor/fusion-imports 是什么?

Package import files and configurations

如何安装 @equinor/fusion-imports?

在项目目录运行 npm install @equinor/fusion-imports,或使用 pnpm add / yarn add / bun add。

@equinor/fusion-imports 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@equinor/fusion-imports 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@equinor/fusion-imports 可以商用吗?

@equinor/fusion-imports 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@equinor/fusion-imports 的下载量有多少?

根据 npm 官方下载统计,@equinor/fusion-imports 在 2026/10/14 – 2026/11/12 这 30 天内被下载 11,099 次,日均约 370 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@equinor/fusion-imports 还在维护吗?

最新版本 2.0.8 发布于 2026/11/12(1 天前);至今共发布 38 个版本,其中过去 12 个月发布了 22 个;首次发布于 2025/03/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。