Chr*_*tos 5 database-migration node.js typescript
首先,这是我的迁移脚本:
const bluebird = require("bluebird");
const mongoose = require("mongoose");
mongoose.Promise = bluebird;
mongoose.connect("mongodb://localhost:27017/app", { useMongoClient: true });
const schema = {
uid: {
type: String,
},
parentID: {
type: String,
},
name: {
type: String,
},
displayName: {
type: String,
},
createdAt: {
type: Date,
},
modifiedAt: {
type: Date,
}
};
const FolderSchema = new mongoose.Schema(schema);
const FolderModel = mongoose.model("folders", FolderSchema);
// initial folders
const folders = [
{ uid: "", parentID: "", name: "folder1", displayName: "Folder 1" },
{ uid: "", parentID: "", name: "folder2", displayName: "Folder 2" },
];
function up(next) {
const promises = [];
folders.map((folder, index) => {
promises.push(FolderModel.create(folder));
});
bluebird.all(promises).then((res) => {
mongoose.connection.close();
next();
});
}
function down(next) {
const promises = [];
folders.map((folder, index) => {
promises.push(FolderModel.remove({ name: folder.name }));
});
bluebird.all(promises).then((res) => {
next();
});
}
module.exports.up = up;
module.exports.down = down;
Run Code Online (Sandbox Code Playgroud)
我使用node-migrate进行迁移,在高级迁移创建部分中,它说:
最后,如果您想使用较新的 ECMAscript 功能或 TypeScript 等语言插件进行迁移,则可以使用编译器标志。
但是当我使用--compiler="ts:typescript"运行脚本时,即使我已经安装了 typescript,它总是会抛出错误。
C:\Users\john\Workspace\app\node_modules\migrate\lib\register-compiler.js:12
require(mod)({
^
TypeError: require(...) is not a function
at registerCompiler (C:\Users\john\Workspace\app\node_modules\migrate\lib\register-compiler.js:12:15)
at Object.<anonymous> (C:\Users\john\Workspace\app\node_modules\migrate\bin\migrate-up:57:3)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
Run Code Online (Sandbox Code Playgroud)
Teo*_*tev 10
您可以执行以下操作来ts-node使用node-migrate.
创建一个简单的js文件,其中包含:
const tsNode = require('ts-node');
module.exports = tsNode.register;
Run Code Online (Sandbox Code Playgroud)执行迁移时将编译器标志与上述文件一起传递:
migrate up --compiler="ts:./typescript-compiler.js"
这应该足以让您运行 TypeScript 迁移。
安装ts-node并typescript。
npm install --save-dev ts-node typescript
# or
yarn add --dev ts-node typescript
Run Code Online (Sandbox Code Playgroud)
然后,将编译器标志设置为以下内容:
--compiler="ts:ts-node/register"
Run Code Online (Sandbox Code Playgroud)
我认为 flag 中的值在您最初的尝试中ts:typescript分割成其组件(由字符分隔)时:表示如下:
ts: 文件扩展名typescript:将注册新扩展和要加载的语言的模块ts:typescript不起作用的原因是因为您node-migrate告诉require一个模块typescript用作将 TypeScript 编译器注册为模块加载器的模块。但是,require该typescript模块不会为新颖的文件扩展名和语言注册新的导入逻辑。
为了能够使用requireTypeScript 文件(新颖的文件扩展名和语言),您需要注册适当的加载器。typescript是不是合适的加载程序。然而,ts-node/register绝对是。
| 归档时间: |
|
| 查看次数: |
3190 次 |
| 最近记录: |