vue.js Vite 3:在config中定义一个全局变量,在字符串的末尾添加一个换行符

a14dhokn  于 2022-11-17  发布在  Vue.js
关注(0)|答案(1)|浏览(230)

Vite 3给了我们定义环境变量的选项,这些环境变量将在项目构建时查找/用值替换键。
定义版本的配置部分如下所示:

define: {
  __RELEASE_VERSION__: JSON.stringify(getReleaseVersion(mode)).trim(),
},

getReleaseVersion看起来像这样:

const getReleaseVersion = (mode: string) => {
  if (mode === 'development') {
    return '';
  }

  const commitHash = childProcess
    .execSync('git rev-parse --short HEAD')
    .toString();

  return `${pkg.version}-${commitHash}`;
};

这段代码运行在服务器端,我已经验证了返回的字符串是正确的。
在我的项目中,我首先做的事情之一(客户端)是console.log('Release:', __RELEASE_VERSION__);

正如你所看到的,在字符串的末尾有一个换行符。这是不需要的,并且会导致跟踪错误(它会导致发布版本不匹配)。
在缩小的文件中也可以看到:

是否有任何方法可以缓解这种情况,或者我是否应该找到另一种方法来访问此变量?

zkure5ic

zkure5ic1#

在你的getReleaseVersion中,你使用的是运行命令的完整输出。* 这包括Git* 的尾随换行符输出。*
要获得所需的字符串,需要去掉尾部的换行符。例如:

const commitHash = childProcess
    .execSync('git rev-parse --short HEAD')
    .toString()
    .trim(); // This "removes the leading and trailing whitespace and line terminator characters from a string."

您正在执行的trim无法工作的原因是,它是在JSON编码的字符串上操作的,所以第一个和最后一个字符是双引号,所有换行符都被转义(例如,' foo\n'-〉'" foo\\n"'),因此它什么也不做。

  • 几乎所有CLI程序都输出一个尾随换行符,以便终端提示符在输出的新行上。

相关问题