【问题标题】:How to have absolute require / import paths to the project root?如何获得项目根目录的绝对需求/导入路径?
【发布时间】:2017-03-07 18:43:26
【问题描述】:

我希望我的应用程序中的所有路径都相对于我的项目根目录,这样我就不必这样做了:

import foo from "../../bar.js";
var foo = require("../../bar.js");

我的应用程序客户端是使用 Webpack 编译的,所以我想我可以使用 Webpack 中的“解析”工具,但不希望这样做,因为这会增加对使用 Webpack 的依赖。后端使用 Node/Express 服务器。

有没有在前端和后端都有效的解决方案?

【问题讨论】:

  • 你想在开发过程中从根目录引用依赖吗?由于 webpack 创建了一个单体包,客户端不会有问题
  • 是的,但在客户端和服务器上。即在某些情况下,我有客户端和服务器都使用的文件,并且它们具有相对路径的依赖关系。
  • 您可以创建一个符号链接以指向您的src 目录并将其放入您的node_modules 目录中:ln -fs ../src node_modules/。然后你可以require('src/bar')
  • 这仅限于 node_modules 文件夹中的项目,我想从根目录中的其他文件夹导入/需要的任何其他文件呢? /seed, /config, /i18n, /shared... ?
  • 您可以改为创建一个名为root 的符号链接以指向项目的根目录,并将其放在 node_modules 目录或其他目录下。然后你可以require('root/seed/bar')。您需要在项目的 postinstall npm 脚本中创建此符号链接。

标签: node.js path webpack


【解决方案1】:

在您的 package.json 中,在以下 JSON 路径 scripts.postinstall 处添加 ln -fsn ../ 'node_modules/>'

{
  "scripts": {
    "postinstall": "ln -fsn ../ 'node_modules/>'"
  }
}

这将在您项目的 node_modules 中创建一个名为 > 的符号链接,该链接指向您项目的根文件夹。

假设您的文件结构如下所示:

project
├── bar.js
├── config
│   ├── database.js
│   ├── rabbitmq.js
│   └── env.js
├── seed
│   ├── soy.js
│   ├── wheat.js
│   ├── pumpkin.js
│   └── squash.js
├── foo
│   └── bar
│       └── baz
│           └── qux.js
├── index.js
└── package.json

foo/bar/baz/qux.js 文件内部,我们可以像这样要求seed/soy.js 文件:

require('>/seed/soy')

【讨论】:

  • 这有效,直到您需要安装新软件包。除非我遗漏了什么,否则你会收到 npm 错误。编辑:这仅适用于 Yarn
猜你喜欢
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 2020-12-31
  • 2012-01-05
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
相关资源
最近更新 更多