how*_*d_9 15 javascript require commonjs node.js webstorm
如何使用项目根目录中的文件路径在 NodeJS 中导入 JavaScript 文件?(而不是相对文件路径)
\n换句话说,我的团队正在尝试从语法样式 A过渡到语法样式 B(如下所示):
\n语法风格A
\nconst source = require(\'../../../../../../source.js\');\nRun Code Online (Sandbox Code Playgroud)\n语法风格 B
\nconst source = require(\'src/source.js\'); // "src" is a direct subfolder of the project root\nRun Code Online (Sandbox Code Playgroud)\n我已经审阅了很多关于这个主题的帖子,但没有一个能够满足我的项目的要求......
\n以下是我的设置。Package.json是由WebStorm生成的,我没有更改它。
\n\nProject_Root\n\xe2\x94\x9c\xe2\x94\x80-\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 a1\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 a2\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 a3\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Worker.js\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80- subFolder1\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 SubWorker.js\n\xe2\x94\x9c\xe2\x94\x80 main.js\n\xe2\x94\x94\xe2\x94\x80 package.json\nRun Code Online (Sandbox Code Playgroud)\nmain.js
\nProject_Root\n\xe2\x94\x9c\xe2\x94\x80-\xe2\x94\x80 src\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 a1\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 a2\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 a3\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Worker.js\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80- subFolder1\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 SubWorker.js\n\xe2\x94\x9c\xe2\x94\x80 main.js\n\xe2\x94\x94\xe2\x94\x80 package.json\nRun Code Online (Sandbox Code Playgroud)\nWorker.js
\nconst Worker = require(\'./src/a1/a2/a3/Worker.js\');\nWorker.doWork();\nRun Code Online (Sandbox Code Playgroud)\nSubWorker.js
\n// If I replace the following with Project Root path, such as:\n// const SubWorker = require(\'src/subFolder1/SubWorker.js\');\n// The script will fail with "Error: Cannot find module \'./src/subFolder1/SubWorker.js\'."\n\nconst SubWorker = require(\'../../../subFolder1/SubWorker.js\');\n\nmodule.exports =\nclass Worker { \n\n static doWork() {\n console.log("doing work");\n SubWorker.doMoreWork();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我尝试了“path.resolve”解决方案,正如这篇文章所建议的:
\napp-module-path解决了所有三个要求,但程序将无法运行(这是隐含的要求): \xe2\x9b\x94Error: Cannot find module \'src/subFolder1/SubWorker.js\'Worker.js
\nmodule.exports =\nclass SubWorker {\n\n static doMoreWork() {\n console.log("doing more work");\n }\n\n};\nRun Code Online (Sandbox Code Playgroud)\n由于 NodeJs 是最重要的后端语言之一,我期待 IDE 对导入提供出色的支持...从项目根引用源文件应该是一个由 IDE 处理的简单操作(我不应该需要使用 Babel) .js 或 Webpack)。我在这里做错了什么吗?
\n我不知道我做错了什么,因为我已经遵循了标准做法:
\n谢谢!
\n下面的 Stack Overflow 帖子是相关的,但没有解决本文中的具体问题。(请在 Stack Overflow 上按标题搜索,因为垃圾邮件过滤器限制了本文中的链接数量,谢谢!)
\nAri*_*ial 11
截至 2023 年 3 月,消除 NodeJS 相对路径的一个好方法是imports使用package.json. (在下面的代码中,#root 是项目根目录。)
// package.json
{
"imports": {
"#root/*.js": "./*.js"
}
}
// main.js:
const Source = require('#root/path/to/Source.js');
// Source.js:
module.exports = class Source {
// ...
}
Run Code Online (Sandbox Code Playgroud)
// package.json:
{
"type" : "module",
"imports": {
"#root/*.js": "./*.js"
}
}
// main.js
import { Source } from '#root/path/to/Source.js';
// Source.js:
export class Source {
// ...
}
Run Code Online (Sandbox Code Playgroud)
不需要“导入”或“要求”任何额外的包(没有 Babel.js、没有 Webpack、没有 RequireJS)。安装 NodeJS 后,此方法开箱即用。
IDE 链接按预期工作(按住 Ctrl 键单击类名可直接跳转到源文件。此外,移动源文件(通过拖放)将自动更新对该文件的所有引用。已在WebStorm 2022.3.2和上测试VS Code 1.76.2。)
适用于.mjs(ECMAScript 模块系统)和.cjs(CommonJS)文件类型。请参阅有关 .cjs 和 .mjs 的参考帖子。
无需修改保留node_modules目录
无需在操作系统级别设置任何 linux 文件链接
| 归档时间: |
|
| 查看次数: |
8518 次 |
| 最近记录: |