'SyntaxError: Identifier directly after number' when string starts with number

'SyntaxError: Identifier directly after number' when string starts with number

我想在我的开发环境和生产环境中都包含当前提交哈希,它可以通过 /version 路径获取。

我的 webpack 配置:

//webpack.config.js

...
const commitHash = require('child_process').execSync('cd .. && git rev-parse --short HEAD', {encoding: 'utf8'}).trim();

module.exports = {
  mode: 'production',
  target: 'node',
  ...
  plugins: [
    new webpack.DefinePlugin({
      'COMMIT_HASH': commitHash,
    })
  ]
};

我的 nodejs 服务器:

//server.js

...
fastify.get('/version', function (request, reply) {
  const version = process.env.NODE_ENV === "dev" ? 
    require('child_process').execSync('cd .. && git rev-parse --short HEAD', {encoding: 'utf8'}).trim() : COMMIT_HASH;
  reply.send(version);
})
...

我的问题是,当我用 webpack 构建它时,我得到 SyntaxError: Identifier directly after number

server.js from Terser plugin
Invalid syntax: 3511a4a [webpack://./server.js:214,104]

第 214 行是 require('child_process')...

但是

如果我将 webpack 配置更改为 const commitHash = 'a3511a4a'; 一切正常并且构建成功。如果我将其更改为 const commitHash = '3511a4a';,错误又会出现。

Webpack 版本为 5.64.2

因为插件会直接替换文本,所以给它的值必须包括字符串本身内部的实际引号。通常,这是通过替代引号完成的,例如 '"3511a4a"',或使用 JSON.stringify('3511a4a').

参考:https://webpack.js.org/plugins/define-plugin/