node.js - 打字稿 - 导入模块 - 找不到模块
问题描述
我在文件中有这个架构data.ts
import mongoose from "mongoose";
const Schema = mongoose.Schema;
const DataSchema = new Schema(
{
id: Number,
message: String,
},
{ timestamps: true }
);
module.exports = mongoose.model('Data', DataSchema);
当我尝试在我的 index.js 中将其导入为:
const Data = require('./data');
我一直看到这个错误:
internal/modules/cjs/loader.js:584
throw err;
^
Error: Cannot find module './data'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:582:15)
at Function.Module._load (internal/modules/cjs/loader.js:508:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
任何想法为什么会这样。
我试过做:
export const data = mongoose.model('Data', DataSchema);
然后导入import { data as Data } from './data'
但这也会返回以下错误:
import { data as Data } from './data'
^
SyntaxError: Unexpected token {
at new Script (vm.js:80:7)
at createScript (vm.js:274:10)
at Object.runInThisContext (vm.js:326:10)
at Module._compile (internal/modules/cjs/loader.js:664:28)
解决方案
快速解决方案:
用于ts-node
直接运行您的 TypeScript 文件
npm install --dev ts-node
使用以下命令启动节点进程:
node -r ts-node/register index.ts
确保您package.json
应该包含以下内容:
{
"dependencies": {
"mongoose": "^5.6.10",
"typescript": "^3.5.3"
},
"devDependencies": {
"ts-node": "^8.3.0"
}
}
关于打字稿:
TypeScript
实际上是 JavaScript 的超集(不是子集)。.ts
在任何 JavaScript 环境(NodeJS、浏览器等)上运行之前,必须将文件编译成 JavaScript。通常在 TypeScript 项目中,我们将有一个
build
命令 inpackage.json
,它将你的.ts
文件编译成.js
文件,然后用一个start
命令来启动一个带有编译js
文件的节点进程:
{
"scripts": {
"build": "tsc index.ts",
"start": "node index.js",
"start:dev": "node -r ts-node/register index.ts"
}
}
- 或者您可以
.ts
直接使用ts-node运行文件。
推荐阅读
- typescript - 基于类属性的 TypeScript 返回类型
- python - 需要更好的方法来排序和合并多维数组
- reactjs - 使用 create-react-app 创建扩展时,chomre.storage 在 localhost 中返回 undefined
- entity-framework-core - 使用基类时 EF Core '没有这样的表'
- wordpress - 从一致的 URL 提供资源
- mysql - VB.NET MySQL 查询不返回值
- php - 如何在while循环中的最终数字后删除尾随逗号
- swift - 在 Swift 中撤消在 UIImageView 上绘制的路径
- c# - .NET API:从邮递员发布对象的问题
- peoplesoft - 如何从 App Engine Peoplecode 中的 (XML) 读取两个元素