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
node.js中使用define和require_第1张图片
这意思是说引入的d模块的path必须是个字符串,我以为是用法[“d”]有问题,于是去掉中括号,改为"d",又报错:
connot find module “d”
node.js中使用define和require_第2张图片
查了一番资料才明白过来,原来是因为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);
})

至此完美解决问题。

你可能感兴趣的:(javascript,node.js,javascript,define,requirejs,require)