我试图在react-native中实现我的第一个应用程序,我需要从保存在项目文件夹中的静态文件中打开数据库。
我了解到我需要允许从资产加载自定义扩展文件,因此我将以下片段添加到我的app.json
文件中:
"packagerOpts": {
"assetExts": ["sqlite", "db"]
},
接下来,我尝试使用componentDidMount()
方法在App.js组件中导入扩展名为.sqlite或.db的静态文件:
componentDidMount = async () => {
await Expo.FileSystem.downloadAsync(
Expo.Asset.fromModule(require("./assets/db/local.db")).uri,
`${Expo.FileSystem.documentDirectory}SQLite/local.db`
);
SQLite.openDatabase("local.db");
};
但博览会建设者一直在说Unable to resolve "./assets/db/local.db" from "App.js"
。有什么建议吗?
答案 0 :(得分:2)
以下代码来自以上两个答案
在项目根目录中创建metro.config.js:
add button
答案 1 :(得分:1)
我发现expo有某种错误,但对此提出了PR或批准了PR。对于等不及要修复官方错误的人,还有一种解决方法:
使用assetExts创建metro.config.js文件为我解决了该问题:
module.exports = {
resolver: {
assetExts: ["db", "mp3", "ttf"]
}
}
并导入此文件,可以在您的App.js中说吗?我现在可以从文件打开SQLite数据库。
答案 2 :(得分:0)
转到node_modules Metro-config defaults.js广告扩展类型到assetExts部分完成〜
答案 3 :(得分:0)
在第 40 届世博会 - 这就是我能够让它运行的方式! Expo website source.
注意您必须将文件放在 assets
目录中,并确保您的 app.json
指定了所有需要的扩展名,我的包括所有内容:{{ 1}}
首先,我将把它分成两部分 - 让 Expo 工作,然后让 typescript 工作。
Expo 很简单,但只有当我意识到这是问题所在时。我遵循了上述指南。总结:
"assetBundlePatterns": ["**/*"],
expo install @expo/metro-config
并使用您尝试添加的任何扩展名调用 metro.config.js
方法,在我的例子中它是 push
(降价):md
Typescript (4) 有更多文档记录,但我做到了:
const { getDefaultConfig } = require('@expo/metro-config');
const defaultConfig = getDefaultConfig(__dirname);
defaultConfig.resolver.assetExts.push('md');
module.exports = defaultConfig;
) 文件,将 Markdown 指定为有效扩展名。*.d.ts
、tsconfig.json
目录之一中"include"
中 typeRoot
下的 compilationOptions
tsconfig.json
对我来说,这些步骤是:
md
./app/declaration.d.ts
中有 "include"
目录,如下所示:app
"include": ["App.js", "app", "test", "storybook"]
:compilationOptions
"typeRoots":["./app/declaration.d.ts"],
多田!