此问题适用于任何文本文件,但由于我想将其用于HTML替换,我将使用HTML文件作为示例。我已经看过像gulp注入和替换npm这样的东西,但是没有接缝完成我所需要的。
我想要一些引用另一个文件的占位符文本。当通过此替换功能运行时,placeholdler文本将被文件的内容替换。
main.html中
type 'a with_infinity = Finite of 'a | Infinite
let print_int_with_infinity pp item =
(match item with
| Infinite -> Format.pp_print_string pp "Infinite"
| Finite i -> Format.pp_print_int pp i)
(* install printer cannot occur in this context *)
#install_printer print_int_with_infinity
other.js
<script><replace src="./other.js" /></script>
转换后输出文件应为。
console.log("Hello, world!");
我有以下内容,但不知道如何使它在节点中使用文件流。
<script>console.log("Hello, world!")</script>
答案 0 :(得分:4)
如果您的文件大小合理,则可以避免使用流,并使用string.replace()
的自定义替换程序:
var fs = require('fs');
function replace(path) {
var REGEX = /<replace src="(.+)" \/>/g;
// load the html file
var fileContent = fs.readFileSync(path, 'utf8');
// replacePath is your match[1]
fileContent = fileContent.replace(REGEX, function replacer(match, replacePath) {
// load and return the replacement file
return fs.readFileSync(replacePath, 'utf8');
});
// this will overwrite the original html file, change the path for test
fs.writeFileSync(path, fileContent);
}
replace('./main.html');
使用流
var es = require('event-stream');
function replaceWithStreams(path) {
var REGEX = /<replace src="(.+)" \/>/g;
fs.createReadStream(path, 'utf8')
.pipe(es.split()) // split the input file into lines
.pipe(es.map(function (line, next) {
line = line.replace(REGEX, function replacer(match, replacePath) {
// better to keep a readFileSync here for clarity
return fs.readFileSync(replacePath, 'utf8');
});
next(null, line);
})).pipe(fs.createWriteStream(path)); // change path if needed
}
replaceWithStreams('./main.html');
答案 1 :(得分:0)
您可以尝试:https://gist.github.com/thebergamo/5ee9f589757ee904f882
基本上,您将阅读index.html,找到替换标记,阅读文件中的内容并替换为其他文件中的内容。
此片段可以帮助您处理例外情况= D