我实际上在做的是编写VS代码扩展,但由于我是Node的新手,因此我很难引用另一个JS文件。
//main.js (compiled from TypeScript)
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("./Test.js");
console.log("hello");
t1();
和
//Test.js
function t1() {
console.log("t1");
}
他们都在同一个文件夹中。如果我从VS Code运行它,或直接从节点运行它,它不起作用
PS E:\VSCodeTest> node src/main.js
hello
E:\VSCodeTest\src\main.js:5
t1();
^
ReferenceError: t1 is not defined
at Object.<anonymous> (E:\VSCodeTest\src\main.js:5:1)
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
VS Code项目实际上是TypeScript,但我把它简化为JS文件中问题的关键。
我相信它应该基于
https://www.typescriptlang.org/docs/handbook/modules.html
仅为副作用导入模块虽然不推荐练习, 一些模块设置了一些可供其他人使用的全局状态 模块。这些模块可能没有任何出口,或者消费者是 对他们的任何出口都不感兴趣。要导入这些模块,请使用:
import“./ my-module.js”;
我怎么误解了?
答案 0 :(得分:2)
将Test.js
更改为:
//Test.js
function t1() {
console.log("t1");
}
module.exports = t1;
然后在main.js
中执行更类似的操作:
const t1 = require("./Test.js");
t1(); // prints "t1"
有很多关于模块如何在文档中工作的信息:https://nodejs.org/api/modules.html
或者,如果您希望t1
成为全局,请将其分配到global.t1
中的Test.js
:
//Test.js
global.t1 = function t1() {
console.log("t1");
};
我不建议如果你可以避免它,但由于所有原因,人们建议尽可能避免使用全局变量
答案 1 :(得分:1)
要求不起作用,但是你很接近 - 如果你想在另一个文件中使用你创建的函数,只需将它添加到该文件的导出中。
/// test.js
exports.t1 = function() ...
// or
module.exports = {
t1: function() ...
}
然后你需要专门保存它才能使用它
/// main.js
var t1 = require('./test.js').t1;
t1();
全局范围不像在浏览器中那样工作,请查看node's docs或try a blog explaining it(我没有写这个并且不能完全担保)