繁体   English   中英

VS Code JavaScript Intellisense 和 ES6 导入问题与 JS 的缩小版和非缩小版

[英]Problems with VS Code JavaScript Intellisense and ES6 Import with Minified & Non-minified Version of JS

下面是我的 Firebase 托管项目文件夹结构:

projectFolder/store/public/scripts/*.min.js
projectFolder/src/*.js

运行terser后,我所有的projectFolder/src/*.js都将缩小到projectFolder/store/public/scripts/*.min.js ,如下所示:

编辑:按照terser的要求,这是我的简洁脚本的样子:

call terser src/site-ui-components.js -o store/public/scripts/site-ui-components.min.js -c -m
echo site-ui-components.min.js: Done.
call terser src/login.js -o store/public/scripts/login.min.js -c -m
echo login.min.js: Done.
call terser src/register.js -o store/public/scripts/register.min.js -c -m
echo register.min.js: Done.
call terser src/profile.js -o store/public/scripts/profile.min.js -c -m
echo profile.min.js: Done.

在我的 ES6 导入中,我执行以下操作:

import { something1, something2 } from "/scripts/something.min.js";

这在运行时工作正常,但在开发期间我丢失了something1something2的所有 vs 代码智能感知 如果我通过执行以下操作启用智能感知,在运行时,我的代码会中断,因为很明显,它找不到"./something.js"

import { something1, something2 } from "./something.js"; // Error, something.min.js not found

我不想通过将*.min.js添加到我所有的非缩小 js来做一些愚蠢的事情,只是为了让它们都能工作。 其次,我尽量避免使用动态导入,通过编写额外的代码来适应不同的环境。

所以我的问题是:

  1. 如何在运行时不破坏我的代码的情况下保持 ES6 导入的智能感知?
  2. 我的文件夹结构有问题吗? 例如,不符合最佳/通用做法? 有什么推荐吗?
  3. 我是否也可以将缩小和未缩小的 js 文件简单地改为*.js

任何建议将不胜感激。 谢谢!

经过大量的搜索和阅读,我终于设法在 VS Code 中使用baseUrljsconfig.jsonpaths来解决我的问题:

{
  "compilerOptions": {
    "baseUrl": ".",
     "paths": {
         "/scripts/*": ["./store/public/scripts/*"]
     }
  }
}

说明:

这里的目标是使以下导入对/src/*.js/store/public/scripts/*.min.js都有效,而不会丢失智能感知:

import { something1, something2 } from "/scripts/something.min.js";

对于我的情况,我的src中的 JS 是否引用/scripts/*.min.js并不重要,因为*.min.js总是从src的最新 object 接口获取。 每当我更改src中的任何 JS 文件时,我只是运行我的terser脚本以使新的更改被智能感知反映出来,所以没什么大不了的。 因此,为了让/src/*.js/scripts/*.min.js从相同的源导入而不会在运行时破坏代码,我可以配置我的jsconfig.json来实现这个目标:

"baseUrl": "."

"." 是我的projectFolder所在的jsconfig.json ,即projectFolder/jsconfig.json

"paths": {
   "/scripts/*": ["./store/public/scripts/*"]
}

"/scripts/*"是我用来引用导出模块文件的字符串模式或导入路径。 因此,当我import { something1 } from "/scripts/something.min.js" ,VS Code 始终引用"./store/public/scripts/*"作为智能感知。

我希望我的解释对每个人都清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM