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