首页 > 解决方案 > Nativescript fs 模块看不到文件夹或文件

问题描述

我在这里使用 Nativescript 教程创建轮播。

我遇到的问题是我收到以下错误(减去我的混淆)

Error: Failed to load component from module: undefined.xml or file: /data/data/{Obfuscated}/files/app/pages/welcome/slides/slide1.xml

当它试图在这一行加载 xml 文件时(下面的完整片段):

slides.push(builder.load(slidePath))

经过一番检查,我发现是文件系统看不到我正在加载的文件。我的代码与教程代码相同。我已经逐行浏览了它(甚至做了一个差异),代码实际上是一样的。

这里可以更好地查看它阻塞的文件路径,您可以将其与我在下面提供的图像进行比较:/ data/data/ {Obfuscated}/files/app/pages/welcome/slides/slide1.xml

我可以验证文件夹结构与教程中的相同,app/pages/welcome/slides.slide1.xml但是当页面加载时,我得到了那个错误,它永远不会加载 xml。

这是完整的片段:

private loadSlides(slideFiles, slidesPath) {
    return new Promise(function (resolve, reject) {
      const slides = []
      const currentAppFolder = fs.knownFolders.currentApp();
      const path = fs.path.normalize(currentAppFolder.path + "/" + slidesPath);
      slideFiles.forEach((dataFile, i) => {
        const slidePath = path + "/" + dataFile;
        console.log(slidePath);
        // Here's where it crashes
        slides.push(builder.load(slidePath))
      });

      resolve(slides);
    });
  }

当我通过调试和使用文件系统模块来测试路径是否存在来测试它时......它总是返回错误,即使文件夹结构确实存在于教程中的方式。

console.log 行显示如下:

/data/data/{myobfuscation}/files/app/pages/welcome/slides

如您所见,它与下面的文件夹路径匹配。

如何让文件系统查看该文件夹结构? 当我使用它来验证存在的图像文件时,它工作得很好。

这是文件夹结构的图像: 在此处输入图像描述

标签: nativescriptangular2-nativescript

解决方案


Webpack 永远不会知道你会在运行时需要这些 XML 文件,你必须调整webpack.config.js以将这些文件包含在包中。

更新CopyWebpackPlugin配置如下,

        // Copy assets to out dir. Add your own globs as needed.
        new CopyWebpackPlugin(
            [
                { from: { glob: "assets/**" } },
                { from: { glob: "fonts/**" } },
                { from: { glob: "**/*.jpg" } },
                { from: { glob: "**/*.png" } },
                { from: { glob: "**/*.xml" } },
            ],
            { ignore: [`${relative(appPath, appResourcesFullPath)}/**`] },
        ),

添加将{ from: { glob: "**/*.xml" } },所有 XML 文件连同文件夹结构复制到包中。


推荐阅读