UNPKG

xslt-insert-html-webpack-plugin

Version:

A Webpack plugin to insert html tag in head

108 lines (92 loc) 3.13 kB
/** * 先移除link和script标签 * 然后再根据传进来的参数添加新的标签 **/ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var et = require('elementtree'); var fs = require('fs'); var path = require('path'); var ElementTree = et.ElementTree; var element = et.Element; var subElement = et.SubElement; // .replace(/^\uFEFF/, '') var parseXml = function parseXml(filename) { return new et.ElementTree(et.XML(fs.readFileSync(filename, 'utf-8'))); }; // 删除找到的link或script节点 var changeNode = function (xml, tag, attrs) { var head = xml.find('./xsl:template/head') var node = subElement(head, tag) Object.keys(attrs).forEach(function (attr) { var value = attrs[attr]; node.attrib[attr] = value; console.log('----------------------正在创建xsl节点和节点属性:tag, attr, value = ', tag, attr, value) }) } function XsltInsertHtmlWebpackPlugin(options) { this.options = options } XsltInsertHtmlWebpackPlugin.prototype.apply = function (compiler) { var self = this compiler.plugin('emit', function (compilation, callback) { var file = self.options.file var nodes = file.data || [] var template = path.resolve(compiler.context, file.template); var xmlPath = file.path || '' var xmlFilename = path.join(xmlPath, file.filename) var xml = parseXml(template); if (nodes) { // 删除links标签 var head = xml.find('./xsl:template/head') var links = head.findall('link') // console.log(links) links.forEach(function (link) { head.remove(link) }) var scripts = head.findall('script') scripts.forEach(function (script) { if(script.attrib.src.indexOf('lib') < 0) { head.remove(script) } }) Object.keys(nodes).forEach(function (tag) { if (_typeof(nodes[tag]) !== 'object') { throw new Error('传入参数的格式不正确'); } else { changeNode(xml, tag, nodes[tag]) } }); } else { throw new Error('Not config options defined!!'); } console.log('----------------------开始输出xsl文件:', xmlFilename, '----------------------') // 最后输出的xml内容 var xmlContent = xml.write({indent: 4}) // if部分暂时无用 if (file.writeToContext) { xmlFilename = path.join(compiler.context, xmlFilename) fs.writeFile(filename, xmlContent, function (err) { if (err) { compilation.errors.push(err) } }) } else { compilation.assets[xmlFilename] = { source: function () { return xmlContent }, size: function () { return xmlContent.length } } } console.log('----------------------输出xsl文件结束----------------------') return callback() }); // } } module.exports = XsltInsertHtmlWebpackPlugin;