如何将时间戳附加到 npmbuild?

How can I attach a timestamp to an npmbuild?

我刚刚开始了解 npm 并使用 npm/webpack/build 创建构建。 如何将时间戳作为文件名的一部分添加到使用 npm/webpack 生成的 bundle.js?有模块可用吗?

没有我知道的现有模块。但是,这可以使用以下解决方案来实现:

  1. 编写自定义 nodejs 脚本以将时间戳附加到结果 bundle.js,即将文件重命名为:bundle-2018-02-14-10-16-22.js.
  2. 利用 npm-scripts post 挂钩调用自定义 nodejs 脚本。

注意:我假设您执行 npm run build 命令生成 bundle.js。在这种情况下,下面的解决方案使用名为 "postbuild" 的 npm 脚本来调用附加时间戳的 nodejs 脚本。


timestamp.js

如下创建自定义nodejs脚本。我们将文件命名为 timestamp.js.

const fs = require('fs');
const path = require('path');

const src = process.argv[2];

if (!src) {
  throw new Error('Missing file path argument');
}

const tstamp = new Date().toISOString()
    .replace(/\.[\w\W]+?$/, '') // Delete from dot to end.
    .replace(/\:|\s|T/g, '-');  // Replace colons, spaces, and T with hyphen.

const ext = path.extname(src);
const fname = path.basename(src).replace(ext, '');
const fpath = path.dirname(src);

const dest = path.join(fpath, `${fname}-${tstamp}${ext}`);

fs.rename(src, dest, function (err) {
  if (err) throw err;
});

package.json

package.jsonscripts 部分添加一个 postbuild 脚本来调用 timestamp.js,如下所示:

{
  ...
  "scripts": {
    "build": ... ,
    "postbuild": "node timestamp path/to/bundle.js"
  },
  ...
}

注意:您当前的 build 脚本应保持原样。


运行

执行 npm run build 命令时,您的构建步骤将 运行 照常进行。完成后,将自动调用 postbuild 脚本,必要时将时间戳附加到文件名。


备注

  • postbuild 脚本中的 path/to/bundle.js 部分应更改为创建结果 bundle.js 文件的实际路径。

  • 上面的示例 postbuild 脚本当前假定 timestamp.jspackage.json 位于同一目录中。您可以 (例如),将其保存在名为 .scripts 的隐藏目录中,该目录与 package.json 位于同一目录中。在这种情况下,您的 postbuild 脚本需要更改为:

    {
      ...
      "scripts": {
        "build": ... ,
        "postbuild": "node .scripts/timestamp path/to/bundle.js"
      },
      ...
    }
    
  • 附加到文件名的时间戳当前使用格式:YYYY-MM-DD-hh-mm-ss.

  • 您会注意到 ES6 Template Literalstimestamp.js 行中使用:

    const dest = path.join(fpath, `${fname}-${tstamp}${ext}`);
    

    但是,如果 node 的版本你的 运行ning 不支持这些,那么用下面的内容替换那行(即使用 + 运算符代替字符串连接):

    const dest = path.join(fpath, fname + '-' + tstamp + ext);