56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* This loader renders the template with underscore if no other loader was found */
 | 
						|
// @ts-nocheck
 | 
						|
"use strict";
 | 
						|
const _template = require("lodash/template");
 | 
						|
 | 
						|
module.exports = function (source) {
 | 
						|
  // Get templating options
 | 
						|
  const options = this.getOptions();
 | 
						|
  const force = options.force || false;
 | 
						|
 | 
						|
  const allLoadersButThisOne = this.loaders.filter(
 | 
						|
    (loader) => loader.normal !== module.exports,
 | 
						|
  );
 | 
						|
 | 
						|
  // This loader shouldn't kick in if there is any other loader (unless it's explicitly enforced)
 | 
						|
  if (allLoadersButThisOne.length > 0 && !force) {
 | 
						|
    return source;
 | 
						|
  }
 | 
						|
 | 
						|
  // Allow only one html-webpack-plugin loader to allow loader options in the webpack config
 | 
						|
  const htmlWebpackPluginLoaders = this.loaders.filter(
 | 
						|
    (loader) => loader.normal === module.exports,
 | 
						|
  );
 | 
						|
  const lastHtmlWebpackPluginLoader =
 | 
						|
    htmlWebpackPluginLoaders[htmlWebpackPluginLoaders.length - 1];
 | 
						|
  if (this.loaders[this.loaderIndex] !== lastHtmlWebpackPluginLoader) {
 | 
						|
    return source;
 | 
						|
  }
 | 
						|
 | 
						|
  // Skip .js files (unless it's explicitly enforced)
 | 
						|
  if (/\.(c|m)?js$/.test(this.resourcePath) && !force) {
 | 
						|
    return source;
 | 
						|
  }
 | 
						|
 | 
						|
  // The following part renders the template with lodash as a minimalistic loader
 | 
						|
  //
 | 
						|
  const template = _template(source, {
 | 
						|
    interpolate: /<%=([\s\S]+?)%>/g,
 | 
						|
    variable: "data",
 | 
						|
    ...options,
 | 
						|
  });
 | 
						|
  // Use `eval("require")("lodash")` to enforce using the native nodejs require
 | 
						|
  // during template execution
 | 
						|
  return (
 | 
						|
    'var _ = eval("require")(' +
 | 
						|
    JSON.stringify(require.resolve("lodash")) +
 | 
						|
    ");" +
 | 
						|
    "module.exports = function (templateParams) { with(templateParams) {" +
 | 
						|
    // Execute the lodash template
 | 
						|
    "return (" +
 | 
						|
    template.source +
 | 
						|
    ")();" +
 | 
						|
    "}}"
 | 
						|
  );
 | 
						|
};
 |