node.js中使用define和require

背景

最近因为学习cocos,发现了一些bug和define有关,于是又研究了一波js的define用法。

网上查了一些相关资料,有些讲的比较细致,有些讲的比较冗余。
参考资料:
https://blog.csdn.net/qq_16633405/article/details/77961539
https://my.oschina.net/heweipo/blog/509554

于是,自己做了一个简单的测试和总结

define用法

define函数遵从于AMD规范,不了解AMD规范的可参考以上第一个链接。

define([name], [dependencies], [callback]);
其中:
name: 模块的名称,可以省略。
dependencies: 所依赖的模块数组,可以省略。
callback : 模块的实现,或者js对象。

例如:

define(["c"],["a","b"],function(a,b){
    return {
        name: a.name,
        age: b.getAge()
    }
})

以上定义了一个模块c,其依赖于模块a和模块b,然后返回a的name属性和b的getAge方法

require用法

定义了define模块,需要配合require来在其他脚本中引入define的模块。例如,以上定义的c模块,可以通过以下方式引入:

require( ['c'] ,function (c) {
    console.log(c.name);
})

这样就可以在脚本中随意使用c模块的定义函数了。

Node.js中用require引入的坑

我做了一个最简单的demo,来实现define和require

// d.js
define(function() {
    return {
        name:"zhangsan"
    }
});

//TestDefine.js
require(['d'],function(d) {
    console.log(d.name);
})

然后,执行node TestDefine.js,发现控制台报错:
path must be a string
在这里插入图片描述
这意思是说引入的d模块的path必须是个字符串,我以为是用法[“d”]有问题,于是去掉中括号,改为"d",又报错:
connot find module “d”
在这里插入图片描述
查了一番资料才明白过来,原来是因为require是requirejs的语法,在node环境下不能这样用。需要先安装requirejs模块,再引入使用。
参考https://www.javaear.com/question/41034306.html
使用方法
step1: 执行 npm install requirejs
step2: 修改编码:

// d.js
define(function() {
    return {
        name:"zhangsan"
    }
});

//TestDefine.js
var requirejs = require("requirejs"); //引入requirejs模块

requirejs(['d'],function(d) {
    console.log(d.name);
})

至此完美解决问题。

发布了43 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_26542493/article/details/102497132