UNPKG

rollup-plugin-static-import

Version:

Rollup plugin for copying imported files without modifying. It's basically a copy plugin with the added functionality of marking imported assets as external.

71 lines (70 loc) 2.33 kB
import fs from "node:fs"; import path from "node:path"; import glob from "glob"; import { createFilter } from "@rollup/pluginutils"; var makePathAbsolute = function(p, rootPath) { if (path.isAbsolute(p)) { return p; } return path.join(rootPath, p); }; var staticImport = function(options) { var pluginOptions = Object.assign({}, { include: [], exclude: [], projectRoot: process.cwd(), baseDir: "src" }, options); var projectRoot = pluginOptions.projectRoot; var absoluteIncludes = pluginOptions.include.map(function(p) { return makePathAbsolute(p, projectRoot); }); var absoluteExcludes = pluginOptions.exclude.map(function(p) { return makePathAbsolute(p, projectRoot); }); var filter = createFilter(absoluteIncludes, absoluteExcludes, { resolve: false }); var baseDir = makePathAbsolute(pluginOptions.baseDir, projectRoot); var self = { name: "static-import", resolveId: function(source, importer) { var id = makePathAbsolute(path.join(path.dirname(importer || "./"), source), projectRoot); if (!filter(id)) { return; } // mark import external if it matches filters return { id: source, external: true }; }, buildStart: function buildStart() { var _this = this; // emit matching files and add them to watch list at the start of build absoluteIncludes.flatMap(function(inc) { return glob.sync(inc); }).forEach(function(id) { _this.emitFile({ type: "asset", source: fs.readFileSync(id), fileName: path.relative(baseDir, id) }); _this.addWatchFile(id); }); }, watchChange: function watchChange(id) { if (!filter(id)) { return; } // emit file if changed file matches filters this.emitFile({ type: "asset", source: fs.readFileSync(id), fileName: path.relative(baseDir, id) }); } }; return self; }; export default staticImport;