gpt4 book ai didi

node.js - 使用 module=system 为 Node 设置 TypeScript 不起作用

转载 作者:搜寻专家 更新时间:2023-10-30 20:40:58 25 4
gpt4 key购买 nike

我尝试使用 typescript 设置一个 restify 项目。经过各种尝试后,我能够通过在 tsconfig.json 中使用“module: commonjs”来创建一个工作版本

我更喜欢使用 system - 但我无法使用 systemjs 进行设置

boot.ts

import {AppServer} from './app';

var _appServer = new AppServer();

tsconfig.json

{
"compilerOptions": {
"target": "ES5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules"
]
}

app.ts

/// <reference path="typings/restify/restify.d.ts" />
import {Server, Response, Request, createServer} from 'restify';

export class AppServer {

private server: Server;

constructor() {
this.init();
}

init() {
this.server = createServer();
this.server.get('/hello/:name', this.respond);

this.server.listen(8080, () => {
console.log('%s listening at %s', this.server.name, this.server.url);
});
}

respond(req: Request, res: Response, next: Function) {
res.send('hello ' + req.params.name);
next();
}

}

使用“模块”:“系统”在 tsconfig.json 中,我得到以下输出(即使在 boot.ts 中使用 import System = require('systemjs')):

➜  server git:(master) ✗ npm run server                                                        

> server@1.0.0 server /Users/maquh/Development/02_Backgular/server
> node boot.js

/Users/maquh/Development/02_Backgular/server/boot.js:1
(function (exports, require, module, __filename, __dirname) { System.register(['./app'], function(exports_1) {
^

ReferenceError: System is not defined
at Object.<anonymous> (/Users/maquh/Development/02_Backgular/server/boot.js:1:63)
at Module._compile (module.js:425:26)
at Object.Module._extensions..js (module.js:432:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:313:12)
at Function.Module.runMain (module.js:457:10)
at startup (node.js:138:18)
at node.js:974:3

转译的 boot.js

System.register(['./app'], function(exports_1) {
var app_1;
var _appServer;
return {
setters:[
function (app_1_1) {
app_1 = app_1_1;
}],
execute: function() {
//System.import('./app.ts').
_appServer = new app_1.AppServer();
}
}
});
//# sourceMappingURL=boot.js.map

更新:我还尝试了另一个替代版本的 boot.ts

var System = require('systemjs');

System.transpiler = 'ts';


System.import('./app.js').then(function(m) {
console.log(m);
}, function(err) {
console.error(err);
});

这些会导致以下错误:

[Error: ENOENT: no such file or directory, open '/Users/markusbellgardt/Development/02_Backgular/server/restify']

最佳答案

系统使用 ES6 模块加载器,nodejs(据我所知)目前不支持,您的初始用例就在您输出到 commonjs 的地方。如果你想在 Node 内使用 ES6 风格的模块解析,你需要告诉 Node 如何加载它,例如:

https://www.npmjs.com/package/es6-module-loader

我在 node 中使用 typescript 很好,但我使用 commonjs,我之前在浏览器中使用过 system,当你有可用的 ES6 模块加载器(如 SystemJs)时它工作正常(JSPM).

关于node.js - 使用 module=system 为 Node 设置 TypeScript 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com