支持的平台
- NodeJS
- 浏览器
- [Cordova / PhoneGap / Ionic 应用](#Cordova / PhoneGap / Ionic 应用)
- [React Native](#React Native)
- Expo
- NativeScript
NodeJS
TypeORM 在 Node.js 14 及以上版本上进行了测试。
浏览器
您可以在浏览器中使用 sql.js。
Webpack 配置
在 browser
文件夹中,该包还包含一个编译为 ES2015 模块的版本。如果您想要使用其他加载器,这是您开始的地方。在 TypeORM 0.1.7 之前,该包的设置方式使得像 webpack 这样的加载器会自动使用 browser
文件夹。从 0.1.7 版本开始,为了支持在 Node.js 项目中使用 webpack,不再自动使用 browser
文件夹。这意味着,在浏览器项目中需要使用 NormalModuleReplacementPlugin
来确保加载正确的版本。您的 webpack 配置文件中,这个插件的配置如下:
plugins: [
..., // 任何现有的插件
new webpack.NormalModuleReplacementPlugin(/typeorm$/, function (result) {
result.request = result.request.replace(/typeorm/, "typeorm/browser");
}),
new webpack.ProvidePlugin({
'window.SQL': 'sql.js/dist/sql-wasm.js'
})
]
并确保 sql-wasm.wasm 文件存在于您的公共路径中。
配置示例
new DataSource({
type: "sqljs",
entities: [Photo],
synchronize: true,
})
不要忘记引入 reflect-metadata
在您的主 HTML 页面中,您需要引入 reflect-metadata:
<script src="./node_modules/reflect-metadata/Reflect.js"></script>
Cordova / PhoneGap / Ionic 应用
TypeORM 可以在使用 cordova-sqlite-storage 插件的 Cordova、PhoneGap 和 Ionic 应用中运行。您可以在模块加载器中选择不同的选项,就像在浏览器包中一样。有关如何在 Cordova 中使用 TypeORM 的示例,请参见 typeorm/cordova-example;有关在 Ionic 中使用 TypeORM 的示例,请参见 typeorm/ionic-example。重要提示:对于使用 Ionic,需要自定义 webpack 配置文件!请查看示例以了解所需的更改。请注意,目前在使用 cordova-sqlite-storage 插件时不支持事务。有关更多信息,请参见 https://github.com/storesafe/cordova-sqlite-storage#other-limitations
React Native
TypeORM 可以在使用 react-native-sqlite-storage 插件的 React Native 应用中运行。有关示例,请参见 typeorm/react-native-example。
Expo
TypeORM 可以在使用 Expo SQLite API 的 Expo 应用中运行。有关如何在 Expo 中使用 TypeORM 的示例,请参见 typeorm/expo-example。
NativeScript
tns install webpack
(请阅读下文,了解为什么需要 webpack)tns plugin add nativescript-sqlite
在应用的入口点创建一个数据源
import driver from "nativescript-sqlite"
const dataSource = new DataSource({
database: "test.db",
type: "nativescript",
driver,
entities: [
Todo, //... 其他实体
],
logging: true,
})
注意:这仅适用于 NativeScript 4.x 及以上版本。
在使用 NativeScript 时,使用 webpack 是强制性的。typeorm/browser
包是原始的 ES7 代码,使用了 import/export
,无法直接运行。它需要被打包。请使用 tns run --bundle
方法。
请查看示例 here!