D3 with word cloud & RequireJS

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.17/require.min.js"></script>

JavaScript

require.config({
    waitSeconds: 10,
    baseUrl: 'https://cdnjs.cloudflare.com/ajax/libs',
    paths: {
        d3: 'd3/4.8.0/d3.min', // try 3.5.17 or 4.8.0
        jquery: 'jquery/3.2.1/jquery.min',
        cloud: 'd3-cloud/1.2.4/d3.layout.cloud.min'
    },
    shim: {
	   		cloud: { deps:['jquery', 'd3'] }
		}
});

require(['cloud', 'd3', 'jquery'], function(cloud, d3, $) {

  var layout;
  var fill = /^3\./.test(d3.version) ? d3.scale.category20() : d3.scaleOrdinal(d3.schemeCategory20);
  
  function draw(words) {
  	d3.select("body").append("svg")
      	.attr("width", layout.size()[0])
      	.attr("height", layout.size()[1])
    	.append("g")
      	.attr("transform", "translate(" + layout.size()[0] / 2 + "," + layout.size()[1] / 2 + ")")
    	.selectAll("text")
      	.data(words)
    	.enter().append("text")
      	.style("font-size", function(d) { return d.size + "px"; })
      	.style("font-family", 'Impact, Charcoal, sans-serif')
      	.style("fill", function(d, i) { return fill(i); })
      	.attr("text-anchor", "middle")
      	.attr("transform", function(d) {
        	return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
      	})
      	.text(function(d) { return d.text; });
		};
  
  layout = cloud()
    .size([120, 120])
    .words([
      "witness", "me", "we", "will", "ride", "eternal", "shiny", "and",
      "chrome"].map(function(d) {
      return {text: d, size: 8 + Math.random() * 20};
    }))
    .padding(1)
    .fontSize(function(d) { return d.size; })
    .on("end", draw);
    
  layout.start();
});