猿问

如何在包里 获取引用用这个包的文件的 路径?

比如这里有个npmpackagetest它的主函数是lib/index.js
exports.say=->
console.log("依赖引用我的文件是??")
//怎么获取?process.cwd()肯定是不行的,因为引用这个包的文件不一定是入口函数。
这里有个demo.coffee,引用了test包,并且调用了它的say方法
test=require'test'
test.say()
在say函数里面是否可以获取的到demo.coffee的文件路径?则个demo.coffee不是入口函数
茅侃侃
浏览 685回答 2
2回答

狐的传说

你这种很明显用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的各种方法了。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答