要求使用绝对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
- Linux:
-
模块
安装一些模块:
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"
希望它可以帮助你。