繁体   English   中英

要求具有绝对路径的本地节点模块在Windows上不起作用

[英]Require local node modules with absolute paths doesn't work on Windows

我正在开发带有几个模块的Node应用程序。 我的节点应用程序使用Babel编译到/dist/app

这是一个示例结构

.
|- main
|   |- config.js
|   |- factories
|   |     |- example.js

这是config.js

const ex = require("/main/factories/example");

我使用node dist/app/main/config.js 产生的错误是:

错误:找不到模块“ / main / factories / example”;

但是,当使用const ex = require("./factories/example"); 它可以正常工作。

仅在Windows (测试Windows 8.1)上会出现此问题,OS X和Linux都可以。

这里有什么问题?

我认为也许是NODE_PATH导致了您的问题。 请参阅本文Better local require() paths for Node.js 有几种方法需要本地节点模块

  • 符号链接

    在node_modules下创建一个指向您的应用程序目录的符号链接:

    • Linux: ln -nsf node_modules app
    • Windows: mklink /D app node_modules
  • 模块

    安装一些模块:

    npm install app-module-path --save

    在您的app.js中,在任何require()调用之前:

    require('app-module-path').addPath(__dirname + '/app');

    在您的very / far / away / module.js中:

    var Article = require('models/article');

  • 启动脚本

    Linux,在项目根目录中创建app.sh:

      #!/bin/sh NODE_PATH=. node app.js 

    Windows,在项目根目录中创建app.bat:

      @echo off cmd.exe /C "set NODE_PATH=.&& node app.js" 

希望它能对您有所帮助。

反过来说,代码可以在Windows上按预期工作。 /main/factories/example C:/main/factories/example在Windows上表示C:/main/factories/example 由于某些原因,它可以在OSX / Linux上运行(可能设置了NODE_PATH)。 我建议不要依赖副作用来拥有有效的代码,也不要使用相对路径(完全依赖于工作目录),您应该像这样构建绝对路径:

const ex = require(__dirname + "/factories/example");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM