export default class MessageChain {
#debug = false;
constructor(options = {}) {
this.#debug = options.debug; // 出错代码
}
}
var ye;
class MessageChain {
constructor(r={}) {
ge(this, ye, r.debug) // 出错代码
}
}
var ce = (a,r,t)=>Le(a, typeof r != "symbol" ? r + "" : r, t)
, Ce = (a,r,t)=>r.has(a) || De("Cannot " + t);
var ie = (a,r,t)=>(Ce(a, r, "read from private field"),
index-DJLqw9J7.js:264 TypeError: Cannot write to private field
at De (index-Wsimtzzt.js:1:47)
at Ce (index-Wsimtzzt.js:1:223)
at ge (index-Wsimtzzt.js:1:445)
at new MessageChain (index-Wsimtzzt.js:212:7585)
at index-Wsimtzzt.js:212:9006
你是说编译后的代码在构建函数里也不能给私有变量赋值?那不对呀,那是 bug 了。
不然的话,贴一下你修改私有变量的代码吧。
在开发环境中,由于Vite通常使用ES模块(ESM)和源代码转换(如Babel插件或Vite内置支持),私有字段(#debug
)的访问和修改通常能够正常工作。这是因为开发环境通常不会进行深度代码转换,或者转换时保留了足够的上下文来正确处理私有字段。
在你的代码中,你试图在构造函数中通过 this.#debug = options.debug;
来赋值私有字段。这个语法在ES2020及更高版本的JavaScript中是有效的,但在编译后的代码中,如果编译器没有正确处理私有字段,就可能导致问题。
由于你看到的编译后的代码使用了不同的函数(如ge
)来尝试访问和修改私有字段,这可能是导致问题的原因。这通常发生在编译器试图优化或转换代码时,但没有正确处理私有字段的特殊情况。
解决方案:
要让Vite在编译时尽可能保留类的源码,你可以考虑以下几个选项:
@babel/plugin-transform-classes
的loose
选项:虽然这通常用于旧版JavaScript环境,但你可以检查这个选项是否影响私有字段的处理。不过,通常不建议在需要私有字段的场景下使用loose
模式。target
和modules
选项:在Vite配置中,你可以设置build.target
和build.lib.esModule
等选项来指定输出代码的格式和目标环境。确保这些设置与你的需求相匹配。注意:由于Vite和Babel等工具的版本不断更新,具体的解决方案可能会随着新版本的发布而变化。因此,始终建议查阅最新的文档和社区讨论。
vite打包后有个js报错,但是这种没办法看到底什么原因,有什么办法可以看到是什么原因嘛 问题是我打开了sourcemap了,也生成了sourcemap了,但是生成个这个是什么鬼
现在遇到个这么个需求,就是项目用的vite的打包工具 我现在想实现把项目用vite打包, 然后把项目中的其中一两个组件也单独打包成一个js,类似于把其中一两个组件打包成组件库的js 也就是执行npm run build的时候既打包了项目,又打包了其中部分组件为组件库的js,供外部html直接引入这个打包好的js进行使用,这个有办法实现吗
今天用vue3+vite+store想要完成一个单处变更至全局动态变化的问题,但是遇到了一个很奇怪的现象,我大致知道可能是内置变量机制的问题,但是请教大神告知深层次的原因 版本如下 功能描述大概就是,左侧树节点点击后会触发修改 不进行深拷贝控制台打印如下 进行深拷贝后页面渲染及控制台打印如下 不是说深拷贝是该方法必须,而是一个现象提取;更直观的原因是我不能对store.getters.getCho
JavaScript中私有变量的使用 JavaScript中没有私有成员的概念;对象属性是公有的。但JavaSctipt中有个私有变量的概念: 任何在函数内部定义的变量都可以认为是私有变量,它只在这个函数内部有效,不能通过外部函数来访问。私有变量大概有:函数参数、局部变量和函数中嵌套的函数。 function add (num1, sum2) { var sum = num1 + num2
访问路由空白无效果无报错;dev开发模式没问题,只存在build后通过服务打开页面存在问题。 通过调试问题出在beforeEach代码: 以上代码改成下面就可以访问了: 路由使用 createWebHashHistory 方式 开发模式没问题,应该排除代码问题吧?
严格来讲,JavaScript 中没有私有成员的概念;所有对象属性都是公有的。不过,倒是有一个私有变量的概念。任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。来看下面的例子: function add(num1, num2){ var sum = num1 + num2; return su