为了账号安全,请及时绑定邮箱和手机立即绑定

如何使node.js要求绝对?(而不是亲戚)

如何使node.js要求绝对?(而不是亲戚)

慕森王 2019-10-14 14:05:46
我想始终通过项目的根目录而不是相对于当前模块来要求文件。例如,如果您查看https://github.com/visionmedia/express/blob/2820f2227de0229c5d7f28009aa432f9f3a7b5f9/examples/downloads/app.js第6行,您将看到express = require('../../')这真是糟糕的IMO。想象一下,我只想将我所有的例子都更靠近根源。那将是不可能的,因为我将不得不在每个示例中多次更新30多个示例。对此:express = require('../')我的解决方案是为基于root的情况提供特殊情况:如果字符串以$开头,则它相对于项目的根文件夹。任何帮助表示赞赏,谢谢更新2现在,我正在使用require.js,它允许您以一种方式编写并在客户端和服务器上均可使用。Require.js还允许您创建自定义路径。-«更新3现在,我移至webpack + gulp,并使用Enhanced-require处理服务器端的模块。请参阅此处的基本原理:http : //hackhat.com/p/110/module-loader-webpack-vs-requirejs-vs-browserify/
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

然后呢:


var myModule = require.main.require('./path/to/module');

它需要的文件就好像是从主js文件中获取的文件一样,因此只要您的主js文件位于项目的根目录下,它就可以很好地工作……这是我的感谢。


查看完整回答
反对 回复 2019-10-14
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

Browserify手册中有一个非常有趣的部分:

避免../../../../../../ ..

并非应用程序中的所有内容都正确属于公共npm,并且在许多情况下,设置私有npm或git repo的开销仍然很大。这里有一些避免  ../../../../../../../相对路径问题的方法。


node_modules

人们有时会反对将特定于应用程序的模块放入node_modules中,因为在不从npm检入第三方模块的情况下,如何检入内部模块并不明显。


答案很简单!如果您有一个.gitignore忽略的文件node_modules:


node_modules

您可以!为每个内部应用程序模块添加一个例外:


node_modules/*

!node_modules/foo

!node_modules/bar

请注意,您无法取消忽略一个子目录,如果父已被忽略。所以,不是忽略的node_modules,你必须忽略每一个目录内 node_modules与  node_modules/*技巧,然后您可以添加您的例外。


现在,在应用程序中的任何位置,您都可以拥有require('foo') 或require('bar')不拥有非常大且脆弱的相对路径。


如果你有很多的模块,并希望让他们从NPM安装的第三方模块更独立的,你可以把它们放在一个目录下node_modules,例如node_modules/app:


node_modules/app/foo

node_modules/app/bar

现在,您将能够require('app/foo')或require('app/bar') 在应用程序的任何地方。


在您的中.gitignore,只需添加一个例外node_modules/app:


node_modules/*

!node_modules/app

如果您的应用程序在package.json中配置了转换,则您需要在您node_modules/foo或您的node_modules/app/foo组件目录中创建一个单独的package.json及其自己的转换字段,因为转换不会跨模块边界应用。这将使您的模块对应用程序中的配置更改更健壮,并且更容易在应用程序外部独立地重用软件包。


符号链接

如果您正在开发可以进行符号链接并且不需要支持Windows的应用程序,则另一个方便的技巧是将lib/ 或app/文件夹符号链接到中node_modules。从项目根目录执行以下操作:


ln -s ../lib node_modules/app

现在,您可以从项目中的任何位置lib/通过require('app/foo.js')获取获取文件lib/foo.js。


自定义路径

您可能会看到一些地方谈论使用$NODE_PATH 环境变量或opts.paths为节点添加目录,并通过浏览器查找来查找模块。


与大多数其他平台不同,$NODE_PATH与有效使用node_modules目录相比,在节点中使用路径样式的外壳样式数组在节点中不那么理想。


这是因为您的应用程序与运行时环境配置之间的联系更加紧密,因此有更多的活动部件,并且您的应用程序只有在正确设置环境后才能正常工作。


node和browserify都支持,但不鼓励使用  $NODE_PATH。


查看完整回答
反对 回复 2019-10-14
  • 3 回答
  • 0 关注
  • 548 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信