【发布时间】:2021-02-25 03:57:07
【问题描述】:
脚本是这样工作的:
- 读取包含文件名的
manifest.json文件 - 将
functions.php文件读入result变量 - 循环通过
pages数组。在每次迭代中,创建正则表达式 - 在
result变量中搜索匹配正则表达式的字符串。如果找到匹配项,则将其替换为来自manifest.json的类似字符串 - 结果变量写入
functions.php文件
脚本:
const manifest = fse.readJsonSync("./dist/manifest.json");
fse.readFile("./functions.php", "utf8", function (err, data) {
if (err) {
console.log(err);
}
let result;
for (let [i, page] of pages.entries()) {
// page = "index";
const scriptsRegEx = new RegExp(`/dist/scripts.${page}.+?'`, "g");
const cssRegEx = new RegExp(`/dist/styles.${page}.+?'`, "g");
result = data
.replace(scriptsRegEx, `/dist/${manifest[`${page}.js`]}'`)
.replace(cssRegEx, `/dist/${manifest[`${page}.css`]}'`);
}
fse.writeFile("./functions.php", result, "utf8", function (err) {
if (err) return console.log(err);
});
console.log(result);
});
问题:
如果我按原样运行脚本,functions.php 内的任何字符串都不会被替换。但是,如果我取消注释循环内的 page = "index" 行,则字符串将在 functions.php 内被替换。简而言之,循环不起作用。可能是什么原因?
【问题讨论】:
-
好吧,
for (let [i, page] of pages.entries())似乎没有将page设置为您想要的,因此您的脚本只有在您手动将其设置为"index"时才会执行某些操作。添加console.log(page)看看它是否真的是正确的。即使它是您所期望的,那么显然您正在构建的 RegExp 与文件中的任何内容都不匹配。 -
我已经尝试过控制台日志记录页面变量以及正则表达式。变量带有正确的正则表达式
标签: javascript node.js wordpress for-loop webpack