node.js - NodeJS本地模块怎么获取?
PHPz
PHPz 2017-04-17 11:52:24
[Node.js讨论组]

公司最近在整前后端分离,本人对 NodeJS 并不是太了解,本人是后端的。

在整理前端应用框架的时候(基于Express),碰到一个很简单问题,具体问题如下:

我在项目根目录下新建了一个 lib 文件夹,这个文件夹中有很多自己的模块。问题来了,怎么把这些自己的模块其它模块里去?

有没有方便的引入方法?比如:

jsvar config = require('lib/config');
var util = require('lib/util');

require node_modules中的模块一样方便的方法。

jsvar fs = require('fs');

有没有变通的解决方法,能方便引入,因为后面考虑做业务模块化,很多模块层级可能比较深,这样的话,相对路径依赖应该不太合适吧?

PHPz
PHPz

学习是最好的投资!

全部回复(5)
怪我咯

一些点:

  1. require默认使用__dirname作为起始路径。参见module的算法解释
  2. fs默认采用process.cwd()作为起始路径。参见fs的文档

如果LZ问的是如何定位项目根目录,并有一个通用引用方式的话,有两种常见的做法。

1

app.js

var _rootDir = __dirname;
Object.defineProperty(global, "ROOT_DIR", {
    get: function(){
        return _rootDir;
    }
});

module.js

var path = require("path") ;
var ADDR_PREFIX = path.join(global.ROOT_DIR , "to/your/path") ;

2

module.js

var path = require("path") ;
var ADDR_PREFIX = path.join(process.cwd() , "to/your/path") ;

第一个鲁棒性更强。app.js所在的__dirname是一个绝对路径地址,而process.cwd()(或者路径串中的.暗示的路径)则有可能变化。

黄舟

你可以把代码放到node_modules里。因为你想要的是:如果模块名不是路径,也不是内置模块,Node将试图去当前目录的node_modules文件夹里搜索。如果当前目录的node_modules里没有找到,Node会从父目录的node_modules里搜索,这样递归下去直到根目录。

下面写一个简单的栗子(先是项目目录):

|-node
    |-node_module
        |-test
            |-a.js
            |-index.js
    |-app.js

test文件夹中a.jsindex.js的代码分别是:

// a.js
var Person = function () {};

Person.prototype.say = function () {
    return "Hello World!";
}

module.exports = Person;
// index.js
var a = require('./a');

module.exports = a;

然后是app.js的代码:

var test = require('test'); // 不再使用路径的方式去加载模块

var obj = new test;

console.log(obj.say());

最后 ok ,运行成功!

伊谢尔伦
  1. npm install 也是支持 git 地址的,所以把你的本地模块独立出来放到 Git 仓库中也是一个不错的选择
  2. npm Enterprise 官方推出的 npm 企业版服务正是为了方便组织内部分享模块而提供的,我想唯一的不足可能就是它是收费服务吧
  3. 除了使用 npm Enterprise 外,使用 CNPM 工具也是可以达到同样的效果,而且它是免费的。如果要了解更多可以参考这篇教程:CNPM搭建私有的NPM服务
大家讲道理

exports
module.exports

天蓬老师

process.cwd(); 可以获取当前应用执行的目录,这样可以在一定程度上获取根目录。

|-node
    |-node_module
        |-test
            |-a.js
            |-index.js
    |-lib
        |-utils.js
    |-app.js

如上目录结构,根目录下面lib目录中有一个utils.js工具模块,使用以下代码可以引入该模块:

jsvar basePath = process.cwd();
var utils = require(basePath + '/lib/utils');
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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