过去,每当我想在Node.js应用程序中拥有相对路径时,我都会使用app module path
。如果我通过.mjs
格式使用ES模块,在某个目录路径变为相对路径时,我如何具有相同的功能?
另一种方法是,我是否能够将别名分配给目录,使所有相对路径都与该别名相关,就像/
是相对于当前目录的路径的别名一样。
更高版本,适用于ES模块。
到目前为止,我找到的最简单的方法是使用实验性特性--loader
。
我使用类似的东西来要求从“@config”导入{SOME_CONSTANT},或者从“@server/connection”导入{createConnection}。
加载程序代码:
import path from 'path'
import fs from 'fs'
export function resolve (specifier, parentModuleURL, defaultResolver) {
specifier = specifier.replace(/^@/, path.resolve('.') + '/src/')
specifier = fs.existsSync(specifier) && fs.lstatSync(specifier).isDirectory() ? `${specifier}/index` : specifier
specifier += '.js'
return defaultResolver(specifier, parentModuleURL)
}
然后node——实验模块——loader./moduleResolver.js./myScriptWithoutExtension
注意:如果您在最近的package.json
中指定了type":"模块"
,则不需要使用. mjs
扩展名。你可以保持无扩展。
注2:你可以用你通常放代码的地方替换src
字符串,你甚至可以有一个基于process.env.NODE_ENV
的分辨率。
注3:如果你给一个目录@
,它将期望找到一个index.js
文件。
通过对内置的module
module进行猴子补丁,可以为加载了require
的CommonJS模块的某些路径提供别名。
ES模块提供了一种通过指定自定义ES模块加载器来更改模块加载行为的方法,如本相关答案中所述。
这样,根源路径(将相对加载程序位置指定)可以映射到某些别名(@
是前端项目的常规):
定制加载程序.mjs
import path from 'path';
const ROOT_PATH = new URL(path.dirname(import.meta.url) + '/src').pathname;
export function resolve(specifier, parentModuleURL, defaultResolver) {
specifier = specifier.replace(/^@/, ROOT_PATH);
return defaultResolver(specifier, parentModuleURL);
}
它的用法如下:
node --experimental-modules --loader ./custom-loader.mjs ./app.mjs
请注意,这为ES模块提供了一种不自然的行为,这可能会影响其他工具(如IDE)如何处理这段代码。
问题内容: 给定相对路径,如何导入Python模块? 例如,如果包含和,和包含,我怎么导入到? 这是一个视觉表示: 希望包含,但是重组文件夹层次结构不是一种选择。 问题答案: 假设你的两个目录都是真实的Python包(文件中确实有文件),那么这是一个相对于脚本位置包含模块的安全解决方案。 我假设你想这样做,因为你需要在脚本中包括一组模块。我在多个产品的生产环境中使用了此功能,并在许多特殊情况下工作
问题 将代码组织成包,想用import语句从另一个包名没有硬编码过的包中导入子模块。 解决方案 使用包的相对导入,使一个模块导入同一个包的另一个模块 举个例子,假设在你的文件系统上有mypackage包,组织如下: mypackage/ __init__.py A/ __init__.py spam.py grok.py B/
问题内容: 我正在python 2.7中开发自己的模块。它位于而不是或中。内部结构为: 包括课程。我遇到导入问题: 我没有将PythonPath设置为包括我的,因此,当server.http尝试包含client.PyCachedClient时,它将尝试从相对路径加载它并失败。我的问题是- 我应该如何以良好的pythonic方式设置所有路径/设置?我知道每次打开控制台并尝试运行服务器时都可以在she
我有一个问题与汇总和汇总插件节点解决。 如果我有这种类型的进口: 它被转换为: 当我尝试在使用Webpack的项目中使用它时,这会破坏捆绑包,因为文件夹显然不是我的Rollup-bundled包的文件夹的子文件夹(因为npm平坦了依赖项)。 我已经将所有的定义为。 这是我的相关配置: 如何使构建保持节点模块导入保持绝对路径?我想在写的时候保存它们,这样节点。js/webpack/wathever可
问题内容: 我有一个ES6模块。将其作为参数执行即可: 是模块的输出。 与此相反,REPL中的以下输入等待进一步的输入: 我不明白为什么。 与以下相同: 尝试导致: 那么,如何在Node.js REPL中导入ES模块? 问题答案: 目前这是不可能的。ES模块应该从ES模块范围导入,而REPL不被认为是其中之一。随着时间的推移,这会有所改善,因为ES模块的支持是实验性的。在Node模块实现中和的使用
本文向大家介绍Linux 相对路径和绝对路径的使用,包括了Linux 相对路径和绝对路径的使用的使用技巧和注意事项,需要的朋友参考一下 01. 概述 绝对路径和相对路径在shell环境中经常遇到,各有用处。有时候相对路径比较方便,有时候绝对路径比较方便。 02. 绝对路径(Absolute Pathname) 绝对路径必定由**/**开头 绝对路径是为档案/文件的所在位置做指向 在任何时候,都可以