【发布时间】:2020-10-20 02:34:02
【问题描述】:
我在前端代码中使用private JavaScript class methods,在我的开发工作流程中使用Snowpack。
目前(从 v2.15.0-pre.5 开始),Snowpack 似乎不能很好地与私有类方法配合使用,即,在使用 snowpack build 构建时,以下内容会失败:
export class TestClass {
#test() {
console.log("testing...");
}
test() {
this.#test();
}
}
要复制的 repo 是 here。克隆后,运行:
npm install
npm run build
我已经使用 Snowpack 打开了issue,但显然问题在于与 Rollup 的集成,修复不是优先事项。
据我了解,要解决它,我们需要:
- custom Rollup plugin 用于 Snowpack。
- 这样的插件应该使用
acornInjectPlugins注入acorn-private-methods。
在我深入学习 Rollup 生态系统之前,我想知道是否有人可以提供这方面的示例?
或者也许还有其他方法可以让它发挥作用?
由于时间限制,我现在重新使用 _methodName 而不是 #methodName,但我计划在时间允许时提供修复。
【问题讨论】:
-
使用 Snowpack 的自定义汇总插件将
acorn-private-methods注入acornInjectPlugins确实 not 似乎可以正常工作,来自 my testing。似乎这仅适用于项目源,而不适用于依赖项;这似乎与 FredKSchott 在链接的 GitHub 问题上提到的一致:“因为 mod101 被视为依赖项,所以它通过不同的工作流程”。我认为可能需要采用不同的方法。 -
@concision,有趣!感谢您花时间验证这一点。 Snowpack 已经与项目源中的私有方法很好地配合,就像
acorn-private-methods注入一样。 -
很高兴听到它对您有所帮助。我很惊讶以前似乎没有人遇到过这个问题。这可能对未来的读者有用,所以我想我会将解决方案打包为 npm 上可用的 rollup 和 snowpack 插件,并将它们作为答案发布。可能需要一两天。
-
@concision,那太好了,谢谢!我已经创建了this snowpack plugin,因为我更喜欢声明性 JSON 配置而不是
snowpack.config.js。如果您可以通过pluginOptions参数使其可配置,那就太好了,例如指定要使用的确切 Acorn 插件。 -
我已经添加了一个插件实现的答案,如您所描述的。它在 NPM 上以snowpack-plugin-acorn-injection 提供。这支持声明性 JSON Snowpack 配置。
标签: javascript rollupjs snowpack acorn