gpt4 book ai didi

webpack - 在编译时运行的代码与在运行时运行的代码

转载 作者:搜寻专家 更新时间:2023-10-30 22:17:28 25 4
gpt4 key购买 nike

我是 Vue 和 Webpack 的新手。我最近使用 vue-cli 生成了一个静态 Web 应用程序,并使用了一段时间。这是 src/components/hello.vue 中的一个片段:

export default {
name: 'hello',
data () {
return {
msg: process.env.NODE_ENV
}
}
}

我认识到表达式 process.env.NODE_ENV 是在编译时求值的。我的问题是

  1. 我如何判断一个表达式是在编译时还是在运行时(即在浏览器上)求值,因为在这两种情况下它都是有效的 javascript 表达式?
  2. 我可以定义在编译时运行的函数吗?

最佳答案

这可以通过 DefinePlugin 实现,它在您的代码中基本上用作“查找和替换”操作。

只需像这样将它添加到您的 webpack 配置中:

const webpack = require('webpack');

module.exports = {
...
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"development"',
})
]
}

这会将代码中所有出现的 process.env.NODE_ENV 替换为 "development"。如果将其与 UglifyJsPlugin 结合使用,然后它将负责从您的构建中删除生成的无效代码:

// Original code

if (process.env.NODE_ENV === 'development') {
alert('development build');
} else {
alert('non-development build');
}

// After DefinePlugin

if ("development" === 'development') {
alert('development build');
} else {
alert('non-development build');
}

// After Uglify

alert('development build');

How can I tell if an expression is evaluated at compile-time or at runtime (i.e. on the browsers) since it is a valid javascript expression in either case?

您传递给 DefinePlugin 的构造函数的对象包含将在编译时翻译的代码定义。

Can I define functions that run at compile-time?

我不这么认为,至少在正在构建的代码中不是这样(但您可以编写作为构建脚本一部分的函数)。这可能是 Uglify 可以做的优化,但会非常激烈。

编辑: val-loader可以在构建时生成源代码。

关于webpack - 在编译时运行的代码与在运行时运行的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45048739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com