简体   繁体   English

NodeJS:导入所有局部变量

[英]NodeJS: Import all local variables

I have a project on TypeScript and I need to run compiled JS file on NodeJS. 我在TypeScript上有一个项目,我需要在NodeJS上运行已编译的JS文件。 The problem is I can't change TypeScript file. 问题是我无法更改TypeScript文件。 The problem is TypeScript compiler makes var mymodule and attaches all variables and functions to this var . 问题是TypeScript编译器使var mymodule并将所有变量和函数附加到此var And I don't know how to import this module to NodeJS. 而且我不知道如何将此模块导入NodeJS。 Can I import all variables (including local) in NodeJS? 我可以在NodeJS中导入所有变量(包括局部变量)吗?

Do things right 做正确的事

TypeScript project should use CommonJS module system. TypeScript项目应使用CommonJS模块系统。

Add exports manually 手动添加导出

If you can not change module system, you can add this at the end of your .ts file: 如果您不能更改模块系统,则可以在.ts文件末尾添加:

declare var module: { exports };
if (typeof module === "object" && module.exports)
    module.exports = mymodule;

Export several submodules 导出几个子模块

You can write this.mymodule1 = ... instead of var mymodule1 = ... . 您可以编写this.mymodule1 = ...而不是var mymodule1 = ... This mode works in both Node.js and browser. 此模式在Node.js和浏览器中均适用。

Use "eval" 使用“ eval”

I can't change TypeScript file 我无法更改TypeScript文件

If you can not change .ts file at all, use eval in dependent .js : 如果您根本无法更改.ts文件,请在相关.js使用eval

var fs = require("fs");
eval(fs.readFileSync("myTSModule.js", "utf8"));

mymodule.myCoolMethod("hello");

Use "runInContext" 使用“ runInContext”

Also you can isolate running context of ambient module by runInContext : 您还可以通过runInContext隔离环境模块的运行上下文:

var context = vm.createContext();
vm.runInContext(code, context);
var mymodule = context.mymodule;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM