要求使用绝对path的本地节点模块在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 (testingWindows 8.1)上,OS X和Linux都很好。

这里有什么问题?

这是相反的方式,代码在Windows上按预期工作。 /main/factories/example C:/main/factories/example在Windows上表示C:/main/factories/example 。 它在OSX / Linux上工作,因为某种原因(可能设置NODE_PATH)。 我build议不要依赖副作用有一个工作代码,也不要使用相对path(完全依赖于工作目录),你应该build立你的绝对path是这样的:

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

我想可能是NODE_PATH导致这个问题。 参考这篇文章Better local require() paths for Node.js 。 有几种方法需要本地节点模块

  • 符号链接

    在node_modules下创build一个符号链接到你的app目录:

    • 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');

    在你的/ far / away / module.js中:

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

  • 启动脚本

    Linux,在你的项目根目录下创buildapp.sh:

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

    Windows,在你的项目根目录下创buildapp.bat:

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

希望它可以帮助你。