如何区分 Svelte 开发模式和构建模式?

Kok*_*zzu 3 svelte svelte-3

开发模式使用npm run dev,发布模式使用npm build

我怎么知道它当前是建立在开发模式上还是不在代码中,例如:

<script>
    import {onMount} from 'svelte';

    onMount(function(){
        if(DEVMODE) { // --> what's the correct one?
            console.log('this is x.svelte');
        }
    })
</script>
 
Run Code Online (Sandbox Code Playgroud)

小智 41

如果您使用 sveltekit:

import { dev } from '$app/environment';

if (dev) {
    //do in dev mode
}
Run Code Online (Sandbox Code Playgroud)

  • 尽管如此,随着 Sveltekit 变得越来越流行并且 Google 在这方面处于领先地位,答案还是有用的。 (5认同)
  • 问题是关于 Svelte,也不是 Sveltekit (4认同)

jed*_*dik 16

如果您将 Svelte 与 Vite 结合使用,您可以使用:

import.meta.env.DEV- 在开发环境中正确。

import.meta.env.PROD- 在生产环境中正确。

import.meta.env.MODE- 模式名称(如果您需要更多控制)。

请参阅有关环境变量的 Vite 文档


dag*_*lti 10

不确定正确的方法。我分享我在我的项目中所做的。

  1. rollup.config.js
import replace from "@rollup/plugin-replace";
const production = !process.env.ROLLUP_WATCH;
Run Code Online (Sandbox Code Playgroud)
  1. plugins:[ ]块内添加这个
replace({
          isProduction: production,
      }),
Run Code Online (Sandbox Code Playgroud)

rollup.config.js 看起来像这样。

},
    plugins: [
        replace({
            isProduction: production,
        }),
        svelte({
            
Run Code Online (Sandbox Code Playgroud)
  1. 然后使用isProduction内部组件。

if (!isProduction){ console.log('Developement Mode'); }

  • 我必须导入什么才能访问 svelte 组件中的“isProduction”?因为当我按照您描述的方式执行此操作时,我收到一个 ReferenceError: isProduction is not Defined.. (2认同)

Mat*_*lli 5

我通过检查应用程序运行的主机名解决了这个问题。您还可以使用其他形式,例如 port 甚至 msm localStore 浏览器变量。

请注意,在使用“窗口”之前,我检查应用程序是否在客户端运行

const isProduction = (): boolean => {
  // Check if is client side
  if (typeof window !== 'undefined' && window.document !== undefined) {
    // check production hostname
    if (window?.location.hostname !== undefined && 
        window.location.hostname === 'YOUR_PRODUCTION_HOSTNAME') {
      return true
    } else {
      return false
    }
  } else {
    return false
  }
}
Run Code Online (Sandbox Code Playgroud)


Elr*_*ron 5

当使用 Svelte (不是 svelte-kit)时,这在 svelte 组件中对我有用:

<script>
    let isProduction = import.meta.env.MODE === 'production';

    if (!isProduction) {
       console.log("Developement Mode");
    } else {
       console.log("Production Mode");
    }
</script>
Run Code Online (Sandbox Code Playgroud)

感谢 timdeschryver 的参考