【问题标题】:Is it possible to require modules from outside of your project directory without relative paths?是否可以在没有相对路径的情况下从项目目录外部要求模块?
【发布时间】:2016-06-26 01:47:28
【问题描述】:

我正在尝试构建一个本地 JS 模块库以在 Node 项目中使用。

如果一个新项目位于 /Users/me/projects/path/to/new/project/ 并且我的库文件位于 /Users/me/projects/library/*.js 中,有没有办法在不使用相对路径的情况下访问这些文件?

/Users/me/projects/path/to/new/project/app.js 中,您可以像这样要求 foo.js:

var foo = require('../../../../../library/foo') 这会起作用,但它很笨重,如果文件移动,你必须更新你的相对路径。

我试过requireFromapp-module-path 都没有运气,因为它们是相对于项目根目录的。

关于如何从项目目录之外获取文件的任何想法?

提前致谢!

【问题讨论】:

  • "是否可以在没有相对路径的情况下从项目目录之外需要模块?" yes.
  • Billy Moon 的回答是正确的。尝试在 requirelib 函数中添加日志语句以查看正在解析的路径。
  • app-module-path 可以采用绝对路径。你试过require('app-module-path').addPath('/Users/me/projects/library')

标签: javascript node.js gulp require


【解决方案1】:
var librarypath = '/Users/me/projects/library/';
// or if you prefer...
// var librarypath = '../../../../../library/';
var foo = require(librarypath + 'foo.js');

...或者多打扮一下...

function requirelib(lib){ return require('/Users/me/projects/library/'+lib+'.js'); }
var foo = requirelib('foo');
var bar = requirelib('bar');

【讨论】:

  • 谢谢,但这是返回 Uncaught Error: Cannot find module 并且路径是正确的
  • 也许你也需要 .js 扩展 - 我更新了我的答案
【解决方案2】:

我多次遇到同样的问题。这可以通过使用basetag npm 包来解决。它本身不一定是必需的,只需安装它,因为它会在 node_modules 内创建指向您的基本路径的符号链接。

const localFile = require('$/local/file')
// instead of
const localFile = require('../../local/file')

使用$/... 前缀将始终引用相对于您的应用根目录的文件。

Disclaimer: I created basetag to solve this problem

【讨论】:

    猜你喜欢
    • 2014-02-03
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多