【问题标题】:How to Handle Assets in NodeJS Module如何在 NodeJS 模块中处理资产
【发布时间】: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.jsonfiles 属性中有这个文件夹:

    "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


【解决方案1】:

看来您只想在包内部使用.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

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 2013-05-13
    • 2018-06-06
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    相关资源
    最近更新 更多