我无法成功使用“ require”加载模块。我的书没有提供足够的内容。
它声称这就是我在模块文件中所需要的(文件名为“ newjavascript.js”:
var days = ["monday", "tuesday", "wednesday", "thursday"];
exports.name = function(number) {
return days[number];
};
exports.number = function(name) {
return days.indexOf(name);
};
这是我在netbeans中作为单独文件拥有的require函数:
function require(InterFaceFile) {
var code = new Function("exports", readFile(InterFaceFile));
var exports = {};
code(exports);
return exports;
}
console.log(weekDay.name(1));
output: "weekDay.name is not a function"
这是与本书前面所描述的模块相同的模块,它提到了更多的浏览器方面的内容:
(function(exports) {
var days = ["monday", "tuesday", "wednesday", "thursday"];
exports.name = function(number) {
return days[number];
};
exports.day = function(name) {
return days.indexOf(name);
};
})(this.weekday = {});
console.log(weekday.name(1));
我了解到“ weekDay”在第一个文件中不存在,因此我尝试在文件名中使用文件名(newjavascript.js,带引号和不带引号),并尝试将整个第一段代码包装在一个函数中名为“ weekDay”,我尝试在浏览器和netbeans中运行都没有运气。我觉得如果我能解决这个问题,从现在开始航行将会很顺利!谢谢!
答案 0 :(得分:0)
感觉您的问题(或您的代码)缺少一些行,我想这会起作用:
// code for require here
const weekDay = require("/path/to/weekday.js"):
console.log(weekDay.name(1)):
这似乎是一项了解NodeJS样式要求如何工作的练习。 或者,如果您使用其他方法(模块模式):
const weekDay = (function(exports) {
var days = ["monday", "tuesday", "wednesday", "thursday"];
exports.name = function(number) {
return days[number];
};
exports.day = function(name) {
return days.indexOf(name);
};
})({});
console.log(weekDay.name(1));
所缺少的步骤实际上是“要求”模块并将结果绑定到可以用来调用函数的变量!
答案 1 :(得分:0)
从浏览器代码开始:
(function(exports) {
var days = ["monday", "tuesday", "wednesday", "thursday"];
exports.name = function(number) {
return days[number];
};
exports.day = function(name) {
return days.indexOf(name);
};
})(window.weekday = {});
console.log(weekday.name(1));
它在浏览器中运行,并在控制台上记录“星期二”。为了清楚起见,this.weekday
被window.weekday
所取代-编写this.weekday={}
以将weekday
用作全局变量名称很容易混淆。
该代码的作用是硬代码,该匿名函数的主体的参数名称为exports,
,并使用新创建的window.weekday
对象对其进行调用。调用weekday
之后,exports
参数的值已用新方法更新。
提供了匿名函数代码来模拟require
的工作方式。
现在考虑通过创建一个require
函数来推广匿名函数模型
exports
对象,exports
,exports
作为实际参数的函数中执行主体代码。然后您可以将其命名为
var weekday = require( filePath_of_script);
使用脚本文件的文件路径需要访问文件系统。由于浏览器中没有不受限制的访问权限,因此此示例对书中提到的readFile
方法进行了虚拟化:
function readFile( filePath) { // dummied example
let fileContent =
`
var days = ["monday", "tuesday", "wednesday", "thursday"];
exports.name = function(number) {
return days[number];
};
exports.number = function(name) {
return days.indexOf(name);
};
`;
return fileContent;
}
function require(InterFaceFile) { // from netbeans
// create a new function with first parameter named "exports":
var code = new Function("exports", readFile(InterFaceFile));
var exports = {};
code(exports);
return exports;
}
// usage example
var weekdays = require("newjavascript.js"); // create and save exports
console.log( weekdays.name( 1));
注意
require
的简单实现-节点的require
方法具有其他功能,例如以exports
对象作为其{{1}对象调用主体代码}值。帖子中this
函数声明之后显示的两行
require
不合适,应该将其删除。
在这些示例中,console.log(weekDay.name(1));
output: "weekDay.name is not a function"
是用于保存weekDay
返回的导出对象的变量名,对于匿名函数,则是用作变量的窗口属性名。