NodeJS — Как вставить узел скрипта в начало HTML-документа?

#javascript #html #node.js

#javascript #HTML #node.js

Вопрос:

Я пытаюсь использовать NodeJS для изменения HTML файла, чтобы добавить тег сценария в начало HTML , чтобы он выполнялся раньше всех других сценариев.

Мой текущий код выглядит следующим образом:

 const fs = require('fs');
const parse = require('node-html-parser').parse;

fs.readFile('test.html', 'utf8', (err,html)=>{
   if(err){
      throw err;
   }

   const root = parse(html);

   const head = root.querySelector('head');
   if (head !== null) {
      head.insertBefore( '<script src = "test.js"></script>', head.firstChild);
      fs.writeFile('test.html', root.toString(), function (err) {
           if (err) return console.log(err);
      });
   }
 });
  

Но insertBefore выдает исключение. Как я могу это исправить?

Комментарии:

1. Пожалуйста, опубликуйте ошибку, которую вы получаете. Я не вижу никакого insertBefore метода в ссылке API для этой библиотеки, и я бы не стал ожидать, что он обязательно будет поддерживать все методы DOM.

Ответ №1:

insertBefore принимает узел в качестве первого аргумента; вы передаете ему строку. Вставьте скрипт с innerHTML вместо:

 head.innerHTML = '<script src = "test.js"></script>'   head.innerHTML;
  

insertAdjacentHTML тоже можно использовать.

Комментарии:

1. document не определено. Когда я использую root , я получаю root.createElement is not a function

2. О, конечно. Вместо этого вы можете добавить innerHTML .

3. Или вы можете использовать parse() для создания <script> (вероятно)