javascript - 如何在 NodeJS 模块中处理资产
问题描述
我有一个 NodeJS 模块,它应该通过 XSL 文件将 XML 转换为 HTML。问题是我需要将 XSL 与模块的其余部分捆绑在一起。
现在它在源文件夹中,我通过以下方式使用它:
function createHtml(xml) {
const fs = require('fs');
const xsltProcessor = require('xslt-processor');
var xsl = fs.readFileSync('./src/xsl/html-export.xsl', 'utf-8');
return xsltProcessor.xsltProcess(xsltProcessor.xmlParse(xml), xsltProcessor.xmlParse(xsl));
}
当然,我确保在package.jsonfiles
的属性中有这个文件夹:
"files": [
"src"
],
此设置在模块内部有效,但在我发布模块并从第二个模块中要求它时无效。然后我还需要将 XSL 文件复制到第二个模块的路径中。
这对我来说真的不起作用。我想访问相对于 JavaScript 源文件的文件,而不是当前的 NodeJS 应用程序。
我尝试使用不同类型的路径(html-export.xsl、./html-export.xsl、./xsl/html-export.xsl),但即使在模块内部也没有其他工作。所以我不能发布它来在别处试用。
好消息是:XSL 文件在发布期间实际上包含在模块中;当我安装它时,node_modules/文件夹中的模块包含 XSL。所以“只是”上面的代码不起作用,因为路径是相对于第二个模块(即带有 的模块)解析的require
,而不是相对于原始模块(即node_modules/中的那个)。
如何处理 NodeJS 中的资产,以便将它们与它们所属的模块捆绑在一起?
这个问题似乎是相关的,但答案正是我所做的,并且由于某种原因它对我不起作用。
解决方案
看来您只想.xsl
在包内部使用该文件,这是我最初误解的内容..
为了做到这一点,您可以使用path
包来解析.xsl
文件的路径。
像这样:
function createHtml(xml) {
const fs = require('fs');
const path = require('path');
const xsltProcessor = require('xslt-processor');
var xsl = fs.readFileSync(path.resolve(__dirname, './src/xsl/html-export.xsl'), 'utf-8');
return xsltProcessor.xsltProcess(xsltProcessor.xmlParse(xml), xsltProcessor.xmlParse(xsl));
}
为了演示如何执行此操作,我构建了一个示例 NPM 包供您查看。虽然这个包不使用.xsl
文件,但它使用.txt
文件——逻辑保持不变。
包中的自述文件包含有关如何使用它的说明。
推荐阅读
- c# - 使用 xbim 创建字符串 IfcParameterValue 会导致异常
- java - 获取相机的隐私 android.settings.APPLICATION_SETTINGS
- postgresql - Postgresql 从复合类型数组和一个附加列中多插入
- python - 如何正确地将输出附加到空列表
- python - Matplotlib 动画的问题
- django-rest-framework - 如何自定义 DRF 过滤器以在顶级结果中添加字段?
- php - 主题wordpress 5.7中的损坏的imgs
- c# - 有没有办法每次都打开同一个 WPF 应用程序实例?
- python - 如何防止/禁止 Decimal 使用科学记数法?
- haskell - Websockets + 服务端