如何在NodeJS模块中处理资产

时间:2019-09-14 14:57:35

标签: javascript node.js npm

我有一个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似乎相关,但是答案正是我所做的,由于某些原因,它对我不起作用。

1 个答案:

答案 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文件-逻辑保持不变。

软件包中的自述文件包含有关如何使用它的说明。

You can find the package on NPM here

You can find the source code to the package here