Nativescript fs 模块看不到文件夹或文件
Nativescript fs module not seeing folder or files
我正在使用 Nativescript 教程创建轮播 here。
我 运行 遇到的问题是我收到以下错误(减去我的混淆)
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/{混淆}/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
如您所见,它与我下面的文件夹路径相匹配。
如何让文件系统看到该文件夹结构?当我用它来验证存在的图像文件时它工作得很好。
这是文件夹结构的图像:
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 文件连同文件夹结构复制到捆绑包中。
我正在使用 Nativescript 教程创建轮播 here。
我 运行 遇到的问题是我收到以下错误(减去我的混淆)
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/{混淆}/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
如您所见,它与我下面的文件夹路径相匹配。
如何让文件系统看到该文件夹结构?当我用它来验证存在的图像文件时它工作得很好。
这是文件夹结构的图像:
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 文件连同文件夹结构复制到捆绑包中。