【问题标题】:node.js global modules path not accessible in node scriptsnode.js 全局模块路径在节点脚本中不可访问
【发布时间】:2021-03-24 10:31:01
【问题描述】:

我正在部署一个 WordPress 站点,该站点具有一堆自定义 mu 插件和自定义主题,它们都具有 gulp 构建过程并且都使用完全相同的 npm 包。因此,我想全局安装所有 npm 包,以便我可以运行根级节点脚本,该脚本将依次运行每个 gulp 文件(主题和插件)并构建所有内容。只需使用节点 child_process.execSync() 来运行 sub gulp 文件。

不幸的是,我的脚本似乎找不到全局安装 npm 包。我的.bashrc 脚本定义了以下内容:

PATH="/usr/local/bin/npm-global/bin:$HOME/bin:$HOME/.local/bin:$PATH"
NODE_PATH="/usr/local/bin/npm-global/lib/node_modules:$NODE_PATH"
NPM_CONFIG_PREFIX=/usr/local/bin/npm-global/

如果我运行 npg -g prefix 和 npm -g root 我会得到以下结果:

$ npm -g prefix
/usr/local/bin/npm-global

$ npm -g root
/usr/local/bin/npm-global/lib/node_modules

但是,如果我运行我的节点脚本,我会收到类似 Error: Cannot find module 'glob' 的错误

如果我添加类似的东西,我可以让我的脚本工作

module.paths.push('/usr/local/bin/npm-global/lib/node_modules') 添加到我的主脚本中,但我还必须将其添加到每个 gulp 文件中。我还应该指出,如果我运行类似child_process.execSync('npm -g root') 的东西,它会输出/usr/local/bin/npm-global/lib/node_modules

那么我怎样才能让我的所有脚本默认只使用全局安装的包呢?

【问题讨论】:

  • 您是否尝试将export 添加到.bashrc 中的PATH/NODE_PATH 定义中,即export PATH="/usr/local/bin/npm-global/bin:$HOME/bin:$HOME/.local/bin:$PATH"

标签: node.js npm npm-scripts


【解决方案1】:

您可以通过setting the NODE_PATH environment variable 为系统上的所有项目共享一个公共node_modules 目录。您的 .bashrc 正在设置该变量,但您可以/应该检查它是否已在脚本本身中设置。 (也许你以不同的用户或不同的子shell运行它?也许你在 macOS 上,最近切换到 zsh 并从不同的 rc 加载东西?也许在开头缺少 export定义NODE_PATH的行?)

最直接的故障排除方法是让您的脚本检查process.env.NODE_PATH 的值。如果它为空或未设置,那是你的问题。

您还可以使用特定的NODE_PATH 调用您的脚本,如下所示:NODE_PATH=/the/path/you/want node script.js

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    相关资源
    最近更新 更多