比如这里有个npmpackagetest它的主函数是lib/index.jsexports.say=->console.log("依赖引用我的文件是??")//怎么获取?process.cwd()肯定是不行的,因为引用这个包的文件不一定是入口函数。这里有个demo.coffee,引用了test包,并且调用了它的say方法test=require'test'test.say()在say函数里面是否可以获取的到demo.coffee的文件路径?则个demo.coffee不是入口函数
2 回答
Qyouu
TA贡献1786条经验 获得超11个赞
你这种很明显用OO写比较好,因为test可能会被无数个模块依赖,要输出对应不同的信息,就需要保存这些信息,然后把消息传递到lib/index.js里。lib/index.js该写成这样(为了省事我写成ES6的class,iojs1.04可以用node--harmony-classesapp.js来启动)javascript"usestrict";classTest{constructor(dir){this.dir=dir;}say(){console.log(this.dir);}}module.exports=function(dir){returnnewTest(dir);};然后使用的时候就可以写了javascript//demo.jsvartest=require("test")(__filename);test.say();javascript//入口app.jsrequire("./demo.js");这样做的好处是你在编写lib/index.js文件的时候,任何方法都可以用到this.dir这个变量,而这个变量是通过实例化来保证每个文件都不同的。而且,在你模块开始的时候就调用一次vartest=require("test")(__filename);之后,由于node.js会把模块自动缓存下来,所以你不用担心单个文件会多次实例化Test。在这之后你就可以随意调用test的各种方法了。
添加回答
举报
0/150
提交
取消