【发布时间】:2020-01-16 02:22:08
【问题描述】:
我有一个 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_ 内的那个)。模块/)。
如何在 NodeJS 中处理资产,以便将它们与它们所属的模块捆绑在一起?
This question 似乎相关,但答案正是我所做的,并且由于某种原因它对我不起作用。
【问题讨论】:
-
看起来你没有正确地“包含”“文件”。虽然很难看到你在做什么(也许提供你的文件/模块的结构'正在使用会有所帮助),你可以尝试做这样的事情:
"files": [ "src/*" ], -
@MattOestreich 有问题的文件是在第二个模块的 node_modules/ 文件夹中,因此它被明确包含。
-
那到底是什么问题?
-
@MattOestreich 我无法通过上述代码访问文件,因为路径是相对于第二个模块解析的,而不是相对于原始模块(在 node_modules/ 文件夹)。
-
这个包在 GitHub 上吗?结构是什么样的?您应该只需要通过您的
index.js公开文件,或者您正在公开您的 API。或者,您可以执行类似const xsl = require('YourPackage/path/to/html-export.xsl').. 的操作。在您提供的链接中,他们公开了导入该文件的函数 - 您是否在做类似的事情?
标签: javascript node.js npm