javascript - 从 ESModules 中的复杂路径导入模块的最佳方法是什么
问题描述
在 CommonJS 中,我使用这种方式。
require(constant.APPROOT + "/lib/utils.js")
代替
require("../../../../../../lib/utils.js")
但是,它不能在 ESModules 中工作。
import util from constant.APPROOT + "/lib/util.js"
// Uncaught SyntaxError: Unexpected identifier
我知道原因,因为它不是静态的。
我尝试两种方式。
[1st](接受复杂路径)
import path from "path"
import fs from "fs"
import foo from "./foo.js"
import bar from "../../../../../lib/bar.js"
import util from "../../../../../lib/util.js"
// application code
[2nd](使用动态导入)
import path from "path"
import fs from "fs"
import foo from "./foo.js"
!async function main(){
const [bar, util] = await Promise.all([
import(constant.APPROOT + "/lib/bar.js"),
import(constant.APPROOT + "/lib/util.js"),
])
// application code
}()
我认为两者都不好。什么是最好的方法?
解决方案
1. 网页包
您可以使用webpack
来设置别名(如果您正在构建一个节点应用程序,然后target: node
在您的配置中进行设置,那么有很多关于如何完成此操作的好指南):
resolve: {
...,
alias: {
'$lib': constant.APPROOT + "/lib"
}
}
然后像 --> 一样导入import util from "$lib/util.js"
2.npm包
你可以使用这个包在 package.json 中设置别名 --> https://github.com/ilearnio/module-alias
推荐阅读
- javascript - 无法读取未定义的某些属性(React/Javascript)
- r - 使用 pdf_text 将几个 PDF 文件读入 R
- php - 从 PHP 连接到 MSSQL Server
- php - 我已将 php 版本 7.2 升级到 7.4,现在在 myphpadmin 面板中出现错误。我附上屏幕短片
- amazon-web-services - Yaml ">" 将多行连接为多个字符串,而不是 AWS::ECS::TaskDefinition 中的单个字符串
- laravel - Laravel 可选参数,路径中带有斜线
- ansible - 如何在ansible中使用过滤器从字符串中提取值
- go - 如何从数据存储返回的对象中检索关键对象
- angular - Angular 8 到 GAE
- regex - 运行 checksetup.pl 时出错 Bugzilla 5.0.6 安装:您提供的正则表达式 '^[^,]+{' 无效