如何将时间戳附加到npmbuild?

时间:2018-02-13 10:03:01

标签: npm webpack gulp npm-scripts

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

1 个答案:

答案 0 :(得分:1)

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

  1. 编写自定义nodejs脚本,将时间戳附加到结果bundle.js,即将文件重命名为:bundle-2018-02-14-10-16-22.js
  2. 利用npm-scripts post挂钩来调用自定义nodejs脚本。
  3. 注意:我假设您执行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

    scripts的{​​{1}}部分添加package.json脚本以调用postbuild,如下所示:

    timestamp.js

    注意:您当前的{ ... "scripts": { "build": ... , "postbuild": "node timestamp path/to/bundle.js" }, ... } 脚本应保持原样。

    <强>运行

    执行build命令时,您的构建步骤将正常运行。完成后,将自动调用npm run build脚本,并根据需要将timetsamp附加到文件名。

    备注

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

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

      postbuild
    • 附加到文件名的时间戳目前使用的格式为:{ ... "scripts": { "build": ... , "postbuild": "node .scripts/timestamp path/to/bundle.js" }, ... }

    • 您会注意到YYYY-MM-DD-hh-mm-sstimestamp.js处使用了ES6 Template Literals

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

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

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