簡體   English   中英

如何在NodeJS模塊中處理資產

[英]How to Handle Assets in NodeJS Module

我有一個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文件-邏輯保持不變。

程序包中的自述文件包含有關如何使用它的說明。

您可以在此處找到NPM上的軟件包

您可以在此處找到包的源代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM