全球对Linux中分散的脚本的要求

时间:2019-03-05 20:46:31

标签: node.js

这不是重复项。

以下答案无效或不相关:

NodeJS require a global module/package

此指向官方文档的链接也不能解决问题。

https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders

问题:

我不仅将node.js用于实际的后端项目和前端打包,而且在我的文件系统中散布着各种实用程序,以执行一些琐碎(有时不是那么琐碎)的事情,例如更新提示,显示帮助,检查运行过程,系统状态,列出特定文件,自动化我的日常任务等。对于此类脚本,我需要需要一些全局可用的js文件,并将这些文件保存在文件系统中。现在,我唯一的选择是使用require(process.HOME + '/js/somefile')语法。

我尝试将脚本放入:

$HOME/node_modules
$HOME/node_libraries
$HOME/.node_modules
$HOME/.node_libraries

也尝试export NODE_PATH变量。

为什么不npm publish?我实际上有数百个基于node.js的CLI实用程序。以及数十种共享的JavaScript。我尝试过在全球范围内发布和重新安装,但是很麻烦。

那是什么解决方案?

我所需要的只是在lib.js中有一个$HOME/js/lib.js,只需键入require('lib')就可以从系统上的任何地方请求它。请注意,调用程序也可以位于文件系统上的任何位置。

更新

小脚本:

console.log(process.env[ 'NODE_PATH' ])
require('lib')

将打印:

/home/me/js:/home/me/soft/node/node-v6.1.0-linux-x64/lib/node_modules/
internal/modules/cjs/loader.js:583
    throw err;
    ^

Error: Cannot find module 'lib'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
    at Function.Module._load (internal/modules/cjs/loader.js:507:25)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (/home/me/test.js:2:1)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)

当然文件在~/js

$ pwd
/home/me
$ cat ~/js/lib.js 
console.log('it loaded')
$ node -v
v10.7.0
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic

1 个答案:

答案 0 :(得分:0)

您可以创建一个git repo来保留您的实用程序,然后将其包含在package.json中(以github地址为例)

"dependencies": {
  "lib": "git+ssh://git@github.com:exebook/my-lib.git"
}

致电npm install后,就可以像其他任何软件包一样要求它:require('lib')。唯一需要注意的是,如果您更新仓库,npm install将不会提取新更改-您需要运行npm update