node.js - 如何在包里 获取引用用这个包的文件的 路径?
ringa_lee
ringa_lee 2017-04-17 11:32:34
[Node.js讨论组]

比如这里有个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不是入口函数

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
PHP中文网

你这种很明显用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的各种方法了。

阿神
#获取基于当前引用路径的完整路径 ?如何实现?
exports.getFilePathBaseOnRequire = (path)->
  if module.parent
    requireParentDirctor = _path.dirname module.parent.filename
    return getFilePath(path, requireParentDirctor)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号