如何在包里 获取引用用这个包的文件的 路径?
比如这里有个npm package test 它的主函数是 lib/index.js
exports.say = ->
console.log("依赖引用我的文件是??")
//怎么获取? process.cwd()肯定是不行的, 因为引用这个包的文件不一定是 入口函数。
这里有个demo.coffee, 引用了 test包,并且调用了它的say 方法
test = require 'test'
test.say()
在say函数里面是否可以获取的到demo.coffee的文件路径? 则个demo.coffee不是入口函数
高町フェイト
11 years, 3 months ago
Answers
你这种很明显用OO写比较好,因为test可能会被无数个模块依赖,要输出对应不同的信息,就需要保存这些信息,然后把消息传递到lib/index.js里。
lib/index.js该写成这样(为了省事我写成ES6的class,iojs1.04可以用 node --harmony-classes app.js来启动 )
javascript
"use strict"; class Test{ constructor(dir){ this.dir=dir; } say(){ console.log(this.dir); } } module.exports=function(dir){ return new Test(dir); };
然后使用的时候就可以写了
javascript
//demo.js var test = require("test")(__filename); test.say();
javascript
//入口app.js require("./demo.js");
这样做的好处是你在编写lib/index.js文件的时候,任何方法都可以用到this.dir这个变量,而这个变量是通过实例化来保证每个文件都不同的。
而且,在你模块开始的时候就调用一次var test = require("test")(__filename);之后,由于node.js会把模块自动缓存下来,所以你不用担心单个文件会多次实例化Test。
在这之后你就可以随意调用test的各种方法了。
newneos
answered 11 years, 3 months ago