公司最近在整前后端分离,本人对 NodeJS 并不是太了解,本人是后端的。
在整理前端应用框架的时候(基于Express),碰到一个很简单问题,具体问题如下:
我在项目根目录下新建了一个 lib 文件夹,这个文件夹中有很多自己的模块。问题来了,怎么把这些自己的模块其它模块里去?
有没有方便的引入方法?比如:
jsvar config = require('lib/config'); var util = require('lib/util');
像 require node_modules中的模块一样方便的方法。
jsvar fs = require('fs');
有没有变通的解决方法,能方便引入,因为后面考虑做业务模块化,很多模块层级可能比较深,这样的话,相对路径依赖应该不太合适吧?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
一些点:
__dirname作为起始路径。参见module的算法解释process.cwd()作为起始路径。参见fs的文档如果LZ问的是如何定位项目根目录,并有一个通用引用方式的话,有两种常见的做法。
1
app.js
module.js
2
module.js
第一个鲁棒性更强。app.js所在的
__dirname是一个绝对路径地址,而process.cwd()(或者路径串中的.暗示的路径)则有可能变化。你可以把代码放到
node_modules里。因为你想要的是:如果模块名不是路径,也不是内置模块,Node将试图去当前目录的node_modules文件夹里搜索。如果当前目录的node_modules里没有找到,Node会从父目录的node_modules里搜索,这样递归下去直到根目录。下面写一个简单的栗子(先是项目目录):
test文件夹中a.js和index.js的代码分别是:然后是
app.js的代码:最后 ok ,运行成功!
npm install也是支持git地址的,所以把你的本地模块独立出来放到Git仓库中也是一个不错的选择exports
module.exports
process.cwd();可以获取当前应用执行的目录,这样可以在一定程度上获取根目录。如上目录结构,根目录下面lib目录中有一个utils.js工具模块,使用以下代码可以引入该模块: