Ser*_*eon 17 javascript webpack vue.js vuejs2 vue-cli-3
在 vue cli 3 项目中,我想在网页中显示版本号。版本号在package.json文件中。
我找到的对此的唯一参考是 vue 论坛中的这个链接。
但是,我无法使建议的解决方案起作用。
webpack.definePlugin作为链接的资源:vue.config.js
const webpack = require('webpack');
module.exports = {
lintOnSave: true,
configureWebpack: config => {
return {
plugins: [
new webpack.DefinePlugin({
'process.env': {
VERSION: require('./package.json').version,
}
})
]
}
},
}
Run Code Online (Sandbox Code Playgroud)
然后在main.tsI read process.env,但它不包含 VERSION (我尝试了几个变体,比如在链接页面中生成一个 PACKAGE_JSON 字段,并生成像 'foo' 这样的普通值而不是从 中读取package-json)。它从未奏效,就像代码被忽略了一样。我猜process.envvue webpack 的东西稍后会重新定义它。
该process日志中main.ts含有,但是,所有的东西,process通常包含在VUE-CLI项目,如模式和定义的变量VUE_APP.env文件。
process在配置 webpack 功能上写入正确,喜欢:
configureWebpack: config => {
process.VERSION = require('./package.json').version
},
Run Code Online (Sandbox Code Playgroud)
(说实话,我对此没有太大希望,但不得不尝试)。
喜欢:
// vue.config.js
module.exports = {
chainWebpack: config => {
config.plugin('define').tap( ([options = {}]) => {
return [{
...options, // these are the env variables from your .env file, if any arr defined
VERSION: JSON.stringify(require('./package.json').version)
}]
})
}
}
Run Code Online (Sandbox Code Playgroud)
但这也无声无息地失败了。
config.plugin('define')@Oluwafemi 建议的语法,喜欢:
chainWebpack: (config) => {
return config.plugin('define').tap(
args => merge(args, [VERSION])
)
},
Run Code Online (Sandbox Code Playgroud)
VERSION局部变量在哪里定义为:
const pkgVersion = require('./package.json').version;
const VERSION = {
'process.env': {
VUE_APP_VERSION: JSON.stringify(pkgVersion)
}
}
Run Code Online (Sandbox Code Playgroud)
但这也行不通。
我每次都重新启动整个项目,所以这不是流程内容不显示的原因。
我的 vue-cli 版本是 3.0.1。
ant*_*oni 16
我加了 2 美分,因为我找到了一种更短的方法,而且显然是正确的方法(https://docs.npmjs.com/misc/scripts#packagejson-vars)
在导出之前将其添加到 vue.config.file 中,而不是在里面:
process.env.VUE_APP_VERSION = process.env.npm_package_version
瞧!
然后你可以从一个组件中使用它 process.env.VUE_APP_VERSION
vue.config.js文件中的以下代码段将起作用,并允许您访问应用程序的版本APPLICATION_VERSION:
module.exports = {
configureWebpack: config => {
return {
plugins: [
new webpack.DefinePlugin({
'APPLICATION_VERSION': JSON.stringify(require('./package.json').version),
})
]
}
},
}
Run Code Online (Sandbox Code Playgroud)
甚至不要尝试向process.envvia添加一些键webpack.definePlugin:它不会像您期望的那样工作。
最后,我通过webpack.DefinePlugin. 我遇到的主要问题是我发现的原始解决方案是definePlugin用来写入process.env.PACKAGE_JSON变量。
这表明以definePlugin某种方式允许向processor添加变量process.env,但事实并非如此。每当我登录process.env控制台时,我都没有找到我试图推入的变量process.env:所以我认为definePlugin技术不起作用。
实际上,什么webpack.definePlugin是在编译时检查字符串并将它们更改为代码中的值。因此,如果您ACME_VERSION通过以下方式定义变量:
module.exports = {
lintOnSave: true,
configureWebpack: config => {
return {
plugins: [
new webpack.DefinePlugin({
'ACME_VERSION': 111,
})
]
}
},
}
Run Code Online (Sandbox Code Playgroud)
然后,在main.js您打印时console.log(ACME_VERSION),您将得到111 正确记录。
然而,现在这只是编译时的字符串更改。如果不是ACME_VERSION您尝试定义process.env.VUE_APP_ACME_VERSION...
当您登录时process.env,VUE_APP_ACME_VERSION密钥不会出现在对象中。但是,一个 rawconsole.log('process.env.VUE_APP_ACME_VERSION')将按111预期产生。
因此,基本上,原始链接和建议的解决方案在某种程度上是正确的。但是,实际上并没有向process对象添加任何内容。我proccess.env在最初的尝试中记录,所以我没有看到任何工作。
然而,现在由于process对象没有被修改,我强烈建议任何试图在编译时将变量加载到他们的 vue 应用程序的人不要使用它。充其量是误导。
您只需导入 package.json 文件并使用其变量即可。
import { version } from "../../package.json";
console.log(version)
Run Code Online (Sandbox Code Playgroud)
如果您使用Webpack,可以通过以下方式注入变量:
// webpack.config.js
plugins: [
new webpack.DefinePlugin({
VERSION: JSON.stringify(require("package.json").version)
})
]
// any-module.js
console.log("Version: " + VERSION);
Run Code Online (Sandbox Code Playgroud)
https://github.com/webpack/webpack/issues/237
| 归档时间: |
|
| 查看次数: |
7757 次 |
| 最近记录: |