Parcel 2 + Vue 3 - 如何设置全局功能标志? Vue Devtools 禁用

Parcel 2 + Vue 3 - How to set global feature flags ? Vue Devtools disabled

开始使用 Vue.js v3 和 Parcel.js v2 的新项目。设置和启动一个简陋的 Hello World 应用程序一切正常,除了浏览器控制台中的警告:

Feature flags __VUE_OPTIONS_API__, __VUE_PROD_DEVTOOLS__ are not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle.
For more details, see http://link.vuejs.org/feature-flags.

此外,Vue Devtools 在控制台中被禁用。

link中只说明了如何在webpack、rollup和Vite上设置这些标志。 在网上搜索在 Parcel 中配置它们,但一无所获。

请帮忙,我真的需要 Vue Devtools 才能工作。

看起来这些警告是在没有名为 __VUE_OPTIONS_API____VUE_PROD_DEVTOOLS__ 的全局变量时生成的(参见 code)。

在 webpack 设置中,您可以在构建时使用 Define Plugin 注入全局变量。不幸的是,我还不知道有任何 parcel2 插件可以做到这一点(尽管编写起来非常简单)。但是,您可以自己创建它们,方法是在应用程序条目 .js 文件的开头附近编写此代码:

globalThis.__VUE_OPTIONS_API__ = true;
globalThis.__VUE_PROD_DEVTOOLS__ = false;

如果您希望在开发或生产中有不同的价值,您可以利用 Parcel 的 node emulation feature,像这样:

if (process.env.NODE_ENV === "development") {
   globalThis.__VUE_OPTIONS_API__ = true
   globalThis.__VUE_PROD_DEVTOOLS__ = true;
} else {
   // different values for production.
   globalThis.__VUE_OPTIONS_API__ = false;
   globalThis.__VUE_PROD_DEVTOOLS__ = false;
}

对于经历过它并且遇到问题的人不是 Parcel 而是 Webpack...

您可以使用 DefinePlugin webpack 来定义这 2 个全局值,如下所示:

plugins: [
    new DefinePlugin({
        __VUE_OPTIONS_API__: true,
        __VUE_PROD_DEVTOOLS__: true
    }),
],

或者,如果您将 webpack 与 Webpack Encore symfony 一起使用,请执行以下操作:

.addPlugin(new webpack.DefinePlugin({
    __VUE_OPTIONS_API__: true,
    __VUE_PROD_DEVTOOLS__: true
}))
  • 需要单独安装 webpack 包以将其导入 webpack.config.js 文件并调用 webpack.DefinePlugin