我只是围绕npm并使用npm / webpack / build创建构建。 如何将时间戳作为文件名的一部分添加到使用npm / webpack生成的bundle.js中?有可用的模块吗?
答案 0 :(得分:1)
我不知道现有的模块。但是,这可以使用以下解决方案来实现:
bundle.js
,即将文件重命名为:bundle-2018-02-14-10-16-22.js
。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 强>
在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
脚本假设postbuild
与timestamp.js
位于同一目录中。您可以(例如),将其保存在名为package.json
的隐藏目录中,该目录与.scripts
位于同一目录中。在这种情况下,您的package.json
脚本需要更改为:
postbuild
附加到文件名的时间戳目前使用的格式为:{
...
"scripts": {
"build": ... ,
"postbuild": "node .scripts/timestamp path/to/bundle.js"
},
...
}
。
您会注意到YYYY-MM-DD-hh-mm-ss
在timestamp.js
处使用了ES6 Template Literals:
const dest = path.join(fpath, `${fname}-${tstamp}${ext}`);
但是,如果你运行的 node 的版本不支持这些,那么用以下内容替换该行(即使用+
运算符代替字符串连接):
const dest = path.join(fpath, fname + '-' + tstamp + ext);