我有一个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.json 的files
属性中拥有此文件夹:
"files": [
"src"
],
此设置在模块内部起作用,但是在我发布该模块并从第二个模块要求它时不起作用。然后,我还需要将XSL文件复制到第二个模块的路径中。
那对我来说不是真的。我想访问相对于JavaScript源文件的文件,而不是当前的NodeJS应用程序。
我尝试使用另一种路径( html-export.xsl , ./ html-export.xsl , ./ xsl / html-export .xsl ),但即使在模块内部也没有其他功能。因此,我无法将其发布以在其他地方试用。
好消息是:XSL文件实际上在发布期间包含在模块中;当我安装它时, node_modules / 文件夹中的模块包含XSL。因此,只是“上面”的代码不起作用,因为该路径是相对于第二个模块(即带有require
的模块)而不是相对于原始模块(即内部的模块)进行解析的node_modules / )。
我如何处理NodeJS中的资产,使其与所属模块捆绑在一起?
This question似乎相关,但是答案正是我所做的,由于某些原因,它对我不起作用。
答案 0 :(得分:2)
看来您只想在软件包内部使用.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
文件-逻辑保持不变。
软件包中的自述文件包含有关如何使用它的说明。