如何解决ts-node使用模块导入和定义的模块执行打字稿
我尝试通过打字稿初始化数据库库。
我的ts就像:
final class CameraView: UIView {
private lazy var videoDataOutput: AVCaptureVideoDataOutput = {
let v = AVCaptureVideoDataOutput()
v.alwaysDiscardsLateVideoFrames = true
v.setSampleBufferDelegate(self,queue: videoDataOutputQueue)
v.connection(with: .video)?.isEnabled = true
return v
}()
private lazy var session: AVCaptureSession = {
let s = AVCaptureSession()
s.sessionPreset = .hd1280x720 //.cif352x288 //.vga640x480
s.automaticallyConfiguresApplicationAudioSession = false
return s
}()
private lazy var previewLayer: AVCaptureVideoPreviewLayer = {
let l = AVCaptureVideoPreviewLayer(session: session)
l.videoGravity = .resizeAspect
return l
}()
private let videoDataOutputQueue: DispatchQueue = DispatchQueue(label: "\(Bundle.main.bundleIdentifier ?? "").videoDataOutputQueue")
private let captureDevice: AVCaptureDevice? = AVCaptureDevice.default(.builtInWideAngleCamera,for: .video,position: .front)
private let audioCaptureDevice: AVCaptureDevice? = AVCaptureDevice.default(for: .audio)
private var audioSession: AVAudioSession!
var movieOutput = AVCaptureMovieFileOutput()
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
contentMode = .scaleAspectFit
beginSession()
}
private func beginSession() {
do {
guard let captureDevice = captureDevice else { return }
guard let audioCaptureDevice = audioCaptureDevice else { return }
let deviceInput = try AVCaptureDeviceInput(device: captureDevice)
if session.canAddInput(deviceInput) {
session.addInput(deviceInput)
}
let aDeviceInput = try AVCaptureDeviceInput(device: audioCaptureDevice)
audioSession = AVAudioSession.sharedInstance()
do {
if #available(iOS 11.0,*) {
try audioSession.setCategory(.playAndRecord,mode: .spokenAudio,policy: AVAudioSession.RouteSharingPolicy.default,options: [.duckOthers])
} else {
try audioSession.setCategory(.playAndRecord,mode: .spokenAudio)
}
try audioSession.setActive(true)
} catch let error {
print("Audio setup error",#file,#function,#line,error.localizedDescription)
}
if session.canAddInput(aDeviceInput) {
session.addInput(aDeviceInput)
}
if session.canAddOutput(videoDataOutput) {
session.addOutput(videoDataOutput)
}
layer.masksToBounds = true
layer.addSublayer(previewLayer)
previewLayer.frame = bounds
session.addOutput(movieOutput)
session.startRunning()
startRecording()
} catch let error {
debugPrint("\(self.self): \(#function) line: \(#line). \(error.localizedDescription)")
}
}
func startRecording() {
// FileSys is class that find current working directory
let exportURL = FileSys.getCurrentWorkingDir().appendingPathComponent("Feed.mov")
var videoConnection: AVCaptureConnection?
for connection in self.movieOutput.connections {
for port in connection.inputPorts {
if port.mediaType == AVMediaType.video {
videoConnection = connection
if videoConnection!.isVideoMirroringSupported {
videoConnection!.isVideoMirrored = true
}
}
}
}
videoConnection?.videoOrientation = .portrait
movieOutput.startRecording(to: exportURL,recordingDelegate: self)
}
override func layoutSubviews() {
super.layoutSubviews()
previewLayer.frame = bounds
}
}
extension CameraView: AVCaptureFileOutputRecordingDelegate {
func fileOutput(_ output: AVCaptureFileOutput,didFinishRecordingTo outputFileURL: URL,from connections: [AVCaptureConnection],error: Error?) {
print("FILE OUTPUT:",error.debugDescription)
print(outputFileURL.path)
}
}
extension CameraView: AVCaptureVideoDataOutputSampleBufferDelegate {}
当我尝试通过ts-node运行脚本时,
import { User,UserRole } from '../entity/User';
import crypto from 'crypto';
import {dbManager,pwhash } from '..';
async function inituser()
{
const user = new User();
user.email = 'sheng.lu@mq.edu.au';
user.own_organization = []
user.salt = crypto.randomBytes(16).toString('hex');
user.password = pwhash("password",user.salt);
user.role = UserRole.admin;
await dbManager.save(user);
const duser = await dbManager.findOne(User);
return duser;
}
const duser = inituser();
console.log("Loaded users: ",duser);
存在以下错误:
npx ts-node db/initializers/inituser.ts
我在package.json文件中添加了“类型”:“模块”。
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:1167:16)
at Module._compile (internal/modules/cjs/loader.js:1215:27)
at Module.m._compile (/usr/lib/node_modules/ts-node/src/index.ts:858:23)
at Module._extensions..js (internal/modules/cjs/loader.js:1272:10)
at Object.require.extensions.<computed> [as .ts] (/usr/lib/node_modules/ts-node/src/index.ts:861:12)
at Module.load (internal/modules/cjs/loader.js:1100:32)
at Function.Module._load (internal/modules/cjs/loader.js:962:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at main (/usr/lib/node_modules/ts-node/src/bin.ts:227:14)
at Object.<anonymous> (/usr/lib/node_modules/ts-node/src/bin.ts:513:3)
root@MEDAIHILW237:/mnt/c/workgit/projeny# ts-node db/initializers/inituser.ts
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /mnt/c/workgit/projeny/db/initializers/inituser.ts
at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:65:15)
at Loader.getFormat (internal/modules/esm/loader.js:101:42)
at Loader.getModuleJob (internal/modules/esm/loader.js:230:31)
at Loader.import (internal/modules/esm/loader.js:164:17)
at Object.loadESM (internal/process/esm_loader.js:68:5)
root@MEDAIHILW237:/mnt/c/workgit/projeny# ts-node db/initializers/inituser
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /mnt/c/workgit/projeny/db/initializers/inituser.ts
at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:65:15)
at Loader.getFormat (internal/modules/esm/loader.js:101:42)
at Loader.getModuleJob (internal/modules/esm/loader.js:230:31)
at Loader.import (internal/modules/esm/loader.js:164:17)
at Object.loadESM (internal/process/esm_loader.js:68:5)
为了克服错误
{
"name": "typescript-test","version": "1.0.0","type": "module",...
}
解决方法
错误Warning: To load an ES module,set "type": "module" in the package.json or
是由ts节点中的以下错误引起的:https://github.com/TypeStrong/ts-node/issues/935
该bug已关闭,并且有解决方案,但仍处于打开状态:https://github.com/TypeStrong/ts-node/issues/1007
我不需要"type": "module"
中的package.json
,而是使用"module": "commonjs"
而不是"module": "es6",
中的tsconfig.json
。
我注意到这是技术债,有待解决ts-node问题#1007。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。