[英]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下创建一个指向您的应用程序目录的符号链接:
ln -nsf node_modules app
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.