@equinor/fusion-framework-vite-plugin-raw-imports

中文文档
2.0.6发布于 2026/11/12ISCTypeScriptES Module零依赖近 30 天下载 7894

Vite plugin for handling ?raw imports

原始使用文档
文档目录18 节
  1. Who Should Use This
  2. Quick Start
  3. Automatic (Fusion CLI)
  4. Manual Installation
  5. Key Concepts
  6. Build-Time Embedding
  7. Extension Filtering
  8. Enforcement Phase
  9. Common Patterns
  10. Display Markdown in a React Component
  11. Handle Additional File Extensions
  12. Add TypeScript Declarations for Raw Imports
  13. Resolve Various Path Formats
  14. API Surface
  15. rawImportsPlugin(options?)
  16. When to Use This Plugin vs Vite's Built-In ?raw
  17. Constraints and Limitations
  18. Related Packages

@equinor/fusion-framework-vite-plugin-raw-imports

Vite plugin that embeds text files as inline string modules via ?raw imports.

Use this plugin when you need reliable raw-string imports in Vite library mode (build.lib) or when Vite's built-in ?raw handler mishandles deeply nested relative paths. It is included automatically by @equinor/fusion-framework-cli.

[!NOTE] Vite supports ?raw imports natively, but treats them as static assets. This plugin reads the file at build time and inlines the content directly into the JavaScript bundle, so the string is available at runtime without a separate asset request.

Who Should Use This

  • Fusion app developers — the plugin is already active when you build with @equinor/fusion-framework-cli. No setup needed.
  • Library authors building with vite build --lib who import markdown, text, or template files as strings.
  • Anyone hitting 404s or incorrect paths from Vite's native ?raw with deeply nested relative imports.

Quick Start

Automatic (Fusion CLI)

If you build with @equinor/fusion-framework-cli, the plugin is registered for you. Just import:

import readme from '../../README.md?raw';
console.log(readme); // full file content as a string

Manual Installation

pnpm add -D @equinor/fusion-framework-vite-plugin-raw-imports
// vite.config.ts
import { defineConfig } from 'vite';
import { rawImportsPlugin } from '@equinor/fusion-framework-vite-plugin-raw-imports';

export default defineConfig({
  plugins: [rawImportsPlugin()],
});

Key Concepts

Build-Time Embedding

The plugin runs during Vite's build (and dev-server) transform pipeline. When it encounters an import like './notes.md?raw', it:

  1. Resolves the file path relative to the importing module.
  2. Reads the file content from disk.
  3. Returns a virtual module: export default "<file content>".

The result is a regular JavaScript string — no asset request at runtime.

Extension Filtering

By default only .md files are intercepted. All other ?raw imports (images, shaders, etc.) fall through to Vite's built-in handler, so existing imports keep working.

Enforcement Phase

The plugin registers with enforce: 'pre', meaning it resolves imports before Vite's internal asset plugin. This avoids conflicts in library mode.

Common Patterns

Display Markdown in a React Component

import readmeContent from '../../README.md?raw';
import '@equinor/fusion-wc-markdown/markdown-viewer';

export default function AboutPage() {
  return <fwc-markdown-viewer>{readmeContent}</fwc-markdown-viewer>;
}

Handle Additional File Extensions

import { rawImportsPlugin } from '@equinor/fusion-framework-vite-plugin-raw-imports';

export default defineConfig({
  plugins: [
    rawImportsPlugin({
      extensions: ['.md', '.txt', '.json'],
    }),
  ],
});

[!NOTE] Extensions not listed in the extensions option are handled by Vite's built-in ?raw support, so image and shader imports remain unaffected.

Add TypeScript Declarations for Raw Imports

Create a declaration file so TypeScript recognises ?raw imports:

// src/types/raw.d.ts
declare module '*.md?raw' {
  const content: string;
  export default content;
}

Resolve Various Path Formats

import a from './file.md?raw';            // same directory
import b from '../README.md?raw';         // parent directory
import c from '../../docs/guide.md?raw';  // deeply nested relative
import d from '/src/docs/guide.md?raw';   // absolute from project root

Paths are resolved relative to the importing file's directory.

API Surface

ExportTypeDescription
rawImportsPlugin(options?: RawImportsPluginOptions) => PluginFactory that creates the Vite plugin instance.
defaultSame as rawImportsPluginDefault export for convenient one-liner usage.
RawImportsPluginOptionsinterfaceConfiguration object accepted by the factory.

rawImportsPlugin(options?)

Create a Vite plugin that intercepts ?raw imports for configured file extensions and returns their content as inline string modules.

ParameterTypeDefaultDescription
optionsRawImportsPluginOptionsundefinedOptional configuration object.
options.extensionsstring[]['.md']File extensions to intercept. Each entry must include the leading dot.

Returns: Plugin — a Vite plugin with resolveId and load hooks.

Throws: Error when a matched file cannot be read from disk. The error message includes the resolved path and the underlying OS error:

Failed to read file: /absolute/path/to/file.md. ENOENT: no such file or directory

When to Use This Plugin vs Vite's Built-In ?raw

ScenarioRecommendation
Standard app build, files inside src/Vite's built-in ?raw is usually sufficient.
Library build with build.libUse this plugin — Vite's native handler can be inconsistent.
Deeply nested relative paths (../../)Use this plugin — it resolves relative paths more reliably.
Binary files (images, fonts)Do not use this plugin — it reads as UTF-8 text only.

Constraints and Limitations

  • Text files only — binary content will be corrupted because the plugin reads with utf-8 encoding.
  • Build-time only — file content is captured at build time; runtime file changes are not reflected.
  • Bundle size — large files are embedded verbatim in the JavaScript bundle, which affects bundle size.
  • @equinor/fusion-framework-cli — CLI that includes this plugin by default for all Vite builds.
  • @equinor/fusion-imports — similar raw-import functionality for esbuild-based builds.

版本与发布记录

@equinor/fusion-framework-vite-plugin-raw-imports 共发布 12 个版本,首次发布于 2025/12/04;过去 12 个月发布了 12 个版本。

版本发布日期距今
2.0.6latest2026/11/121 天前
2.0.6-next.0next2026/11/112 天前
2.0.52026/10/1727 天前
2.0.5-trusted-publishing-20261015-9dfe7602cd2a49a8a9df00d62c26e7304a82a85atrusted-publishing-202610152026/10/1629 天前
2.0.42026/10/121 个月前
2.0.32026/09/012 个月前

关于 @equinor/fusion-framework-vite-plugin-raw-imports 的常见问题

@equinor/fusion-framework-vite-plugin-raw-imports 是什么?

Vite plugin for handling ?raw imports

如何安装 @equinor/fusion-framework-vite-plugin-raw-imports?

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

@equinor/fusion-framework-vite-plugin-raw-imports 支持 TypeScript 吗?

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

@equinor/fusion-framework-vite-plugin-raw-imports 支持 ESM 还是 CommonJS?

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

@equinor/fusion-framework-vite-plugin-raw-imports 可以商用吗?

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

@equinor/fusion-framework-vite-plugin-raw-imports 的下载量有多少?

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

@equinor/fusion-framework-vite-plugin-raw-imports 还在维护吗?

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