代码之家  ›  专栏  ›  技术社区  ›  exebook

linux中分散脚本的全局需求

  •  0
  • exebook  · 技术社区  · 6 年前

    这不是复制品。

    以下答案无效或不相关:

    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
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   jakedipity    6 年前

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

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

    你打电话之后 npm install 您可以像任何其他包一样要求它: require('lib') . 唯一需要注意的是,如果你更新了回购协议, NPM安装 不会做出新的改变-你需要运行 npm update

    推荐文章