【问题标题】:Run installed node program from within a shell script从 shell 脚本中运行已安装的节点程序
【发布时间】:2019-09-18 03:45:39
【问题描述】:

我已经使用 nvm 设置了特定的节点版本,

nvm install 9.11.1

我已经构建并安装了一个 nodejs 程序:

npm install -g osmlint

这是新生成的可执行文件的完整路径:

which osmlint
/root/.nvm/versions/node/v9.11.1/bin/osmlint

我使用以下命令运行它:

/root/.nvm/versions/node/v9.11.1/bin/osmlint crossingbuildings --bbox="[72.9,18.8,73,18.9]" --zoom=12 india.mbtiles > test.txt

而且效果很好。

我已将相同的内容放入 bash shell 脚本中。 (比如说,run1.sh)。但是当我运行 shell 脚本时,它会出错。

internal/modules/cjs/loader.js:775
    throw err;
    ^

Error: Cannot find module '/root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/node_modules/@mapbox/tile-reduce/node_modules/sqlite3/lib/binding/node-v72-linux-x64/node_sqlite3.node'
Require stack:
- /root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/node_modules/@mapbox/tile-reduce/node_modules/sqlite3/lib/sqlite3.js
- /root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/node_modules/@mapbox/tile-reduce/node_modules/@mapbox/mbtiles/lib/mbtiles.js
- /root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/node_modules/@mapbox/tile-reduce/src/index.js
- /root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/validators/crossingBuildings/index.js
- /root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/cli.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:772:15)
    at Function.Module._load (internal/modules/cjs/loader.js:677:27)
    at Module.require (internal/modules/cjs/loader.js:830:19)
    at require (internal/modules/cjs/helpers.js:68:18)
    at Object.<anonymous> (/root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/node_modules/@mapbox/tile-reduce/node_modules/sqlite3/lib/sqlite3.js:4:15)
    at Module._compile (internal/modules/cjs/loader.js:936:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10)
    at Module.load (internal/modules/cjs/loader.js:790:32)
    at Function.Module._load (internal/modules/cjs/loader.js:703:12)
    at Module.require (internal/modules/cjs/loader.js:830:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/node_modules/@mapbox/tile-reduce/node_modules/sqlite3/lib/sqlite3.js',
    '/root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/node_modules/@mapbox/tile-reduce/node_modules/@mapbox/mbtiles/lib/mbtiles.js',
    '/root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/node_modules/@mapbox/tile-reduce/src/index.js',
    '/root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/validators/crossingBuildings/index.js',
    '/root/.nvm/versions/node/v9.11.1/lib/node_modules/osmlint/cli.js'
  ]
}

显然,相同的节点环境在 shell 脚本的 bash 环境中不起作用。我们如何做到这一点?

【问题讨论】:

    标签: node.js bash nvm


    【解决方案1】:

    要从 shell 脚本运行 node 可执行文件,我们需要设置 node 环境。

    nvm use 9.11.1
    

    但即使nvm 对shell 脚本的bash 环境也是未知的。所以,需要进行设置。

    source /root/.nvm/nvm.sh
    

    组合命令:

    # required : initialize nvm, then make it set the current node version to v9.11.1
    source /root/.nvm/nvm.sh
    nvm use 9.11.1
    # run osmlint. # mention full path of executable.
    /root/.nvm/versions/node/v9.11.1/bin/osmlint crossingbuildings --bbox="[72.9,18.8,73,18.9]" --zoom=12 india.mbtiles > test.txt
    

    ..那行得通。分享这个,以防像我这样的其他人不得不从 shell 脚本中运行节点程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2021-06-17
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多