Just look at them all.
Photo-Illustration: Vulture; Photos: Disney
Star Wars is obsessed with the light-vs.-dark duality of the Jedi, but the franchise’s most interesting characters tend to be those who operate on the moral fringe, pulling off schemes and heists amid escalating striation, Galactic Empire fascism, and worsening conflict. They’re pilots and pirates, deserters and tricksters, organic and inorganic creatures who say they’re out for themselves but also, under all that guff and slick talk, have an earnest core. They’re smugglers, and they are — coincidentally? Purposely? Wonderfully! — the hottest characters Star Wars has to offer. Especially when contrasted against those boring (mostly) sexless Jedi. Yeesh!
Nearly every live-action Star Wars project has a character who falls into this category, a pattern that became clearer with the introduction of Manny Jacinto’s twitchy, nefarious, utterly captivating apothecary, Qimir, in The Acolyte. Star Wars is full of scoundrels and scamps oozing sex appeal under their earth-toned utilitarian clothes and identity-hiding helmets, so we have compiled the 16 most appealing.
A quick note about our methodology: We started with a list of dozens that we made more manageable by drawing a line between smugglers and crime lords (so no Hutts) and excluding animated characters, so our apologies if you are very into, say, Jolee Bindo or Trace and Rafa Martez and are disappointed not to see them here. (Please provide your impassioned defenses in the comments!) And now, without further ado, an ode to the rogues and rascals who make being hot and doing crimes in this galaxy so fun to watch.
16.
Tobias Beckett (Solo: A Star Wars Story)
Honestly, there’s nothing terribly wrong with Tobias Beckett. He’s sufficiently complicated, being a double-crossing thief who loses his spouse and partner in crime, Val, when the Vandor-1 coaxium heist goes bad. In hindsight, his decision to betray his budding mentee, Han, was perfectly justifiable. He’d just met this kid! But really, the main reason he lands at the bottom of this power ranking is the hair: Woody Harrelson has played characters with some questionable dos in his day (see The Hunger Games among others), but Beckett’sblond duckling swirl is a whopper. —Nicholas Quah
15.
Babu Frik (Star Wars: The Rise of Skywalker)
He’s good with his hands, has a rakish little mustache, and can fix any piece of tech you have that’s acting up. Husband material. —Roxana Hadadi
14.
Maz Kanata (Star Wars: The Force Awakens)
Please keep your ageist, anti-wrinkle takes to yourself. Maz Kanata has more than 1,000 years of pirate-queen experience, and she makes those weird goggles look cool as hell; you would be lucky to be with someone who radiates this much confidence. It’s still unfortunate that Lupita Nyong’o didn’t have a live-action role in the Star Wars reboot trilogy, but her drawling, amused voice performance does a lot to enliven the character. Maz is self-assured enough to climb across a restaurant table to get a better look at a man’s eyes and has connections to all corners of the underworld. Can you match her freak? —R.H.
13.
L3-37 (Solo: A Star Wars Story)
Some of us were into Her’s AI-rotica well before those losers at OpenAI attempted to hijack the vibes. Some of us are just ahead of the curve! But even without any prerequisite predisposition toward robophilia, L3-37 has a lot going for it. We do love a civil-rights revolutionary, and the droid has the undeniable benefit of Phoebe Waller-Bridge’s wry, withering voice. —N.Q.
12.
Young Han Solo (Solo: A Star Wars Story)
Baby Solo is kind of a dud, but to be fair, we catch this version of Han in the process of becoming a spacefaring smuggler. For most of Solo, Alden Ehrenreich’s interpretation possesses more street-rat energy than anything else, which is its own separate tradition of hotness that’s only minorly related to smuggler hotness. The latter is principally tied to a life in perpetual, untethered motion … like a pirate! By contrast, a street rat’s debonairness lies more in a sense of scrappiness and putting on airs … like Aladdin! This can still be totally appealing, but it’s simply not the same. —N.Q.
11.
Young Lando Calrissian (Solo: A Star Wars Story)
More and more, it seems Donald Glover is stuck playing the same version of himself in everything, from his Childish Gambino persona to his work in Magic Mike XXL, Guava Island, Atlanta, andMr. & Mrs. Smith. In hindsight, his version of Lando shoulders a ton of “What is Glover’s career gonna be?” baggage. But in the film’s internal vacuum, his smuggler is a perfectly serviceable sneering, flirting, posturing figure; he clearly lacks the gravitas of elder Lando, but his unbroken eye contact when he tells Han “Everything you heard about me is true” is a great little moment. Glover’s Lando is not a forever romantic prospect, but with how appealing he looks in that upturned-collar cloak, he’s definitely a “ruin your life for one night to six months” kind of dude. —R.H.
10.
Ezra Bridger (Ahsoka)
Bless me, Space Jesus, for I have sinned thinking about how hot you are once again! The Jedi pilot and resistance fighter of the Ghost smuggling crew from Star Wars Rebels is double-take handsome when he makes his live-action debut in Ahsoka. I’m not sure which hair products Eman Esfandi has access to, but they are working. That curl texture: Its Let me run my fingers through it, please??? appeal is endless. —R.H.
9.
Chewbacca (Star Wars: A New Hope)
What if chest hair but everywhere? —N.Q.
8.
Val (Solo: A Star Wars Story)
A leather jacket can wear you if you don’t have the bearing or attitude for it. But Thandiwe Newton is so memorable as Val in Solo because her aviator-style coat with its white fur lining is such a perfect fit and so effectively establishes her as a capable badass who just happens to be serving face. Even during the train heist that kills her, Val looks as if she’d step on your neck and you’d like it — an area in which Newton thrives, actually, between Solo, Westworld, and The Chronicles of Riddick. Val’s being killed off so early is an injustice for all of us who would have loved to see her slap someone in the face. —R.H.
7.
DJ (Star Wars: The Last Jedi)
A fair amount of the Canto Bight subplot in The Last Jedi, well intentioned as it may be, hasn’t aged flawlessly; its “Here is why war profiteering is bad” framing is too ham-fisted to be anything but didactic. But Benicio del Toro as the hacker and smuggler thief DJ is pitch-perfect, a morally compromised character whose nihilistic worldview supports anything he wants to do and whose stubble looks like it would feel gritty and wonderful rubbing against my face. Only someone as seasoned at playing charming assholes as del Toro is could make a line like “Good guys, bad guys, made-up words” sound wise rather than foolish, but that’s exactly DJ’s appeal. He sells a cynical fantasy, and he does it while being very tall, dark, and handsome. —R.H.
6.
Poe Dameron (Star Wars: The Force Awakens)
Oscar Isaac, with those firearms, that little tendril falling over his forehead, and that smart-aleck smirk … perhaps you can resist the former spice runner turned rebel who would go on to (briefly) rule the spice world of Arrakis and sympathize with the rebels there, too. But I have eyes and I am mortal and therefore I cannot. —R.H.
5.
Lando Calrissian, original recipe (Star Wars: The Empire Strikes Back)
Lando embodies what happens to smugglers when they get to make good — they become the Man. For a certain kind of person (e.g., me), this presents its own kind of allure. What’s more attractive than the power radiating off a shady criminal turned politician who looks like Billy Dee Williams? Not much, I assure you. Sure, Lando sells out Han and the gang to the galactic fascists in The Empire Strikes Back, but let’s be real: He made the perfectly defensible choice to take care of his own people. Pragmatism is underrated! In any case, he makes up for it by saving Luke later because a great smuggler is one who works every possible angle. —N.Q.
4.
Zorii Bliss (Star Wars: The Rise of Skywalker)
For its manifold sins, I would have committed to completely scrubbing The Rise of Skywalker from my memory if not for the movie’s sizzling few scenes with Zorii Bliss, Poe’s former spice-running buddy and old flame. Sure, it’s probably a sin of its own to hide Keri Russell’s face behind a Daft Punk helmet, but I get it. A sense of mystery is the height of sensuality, you know? Plus, Russell still gets to project her smoky voice and equally smoky eyes, and the character’s obliquely referenced, totally complicated history with Poe is the stuff of noir, the sexiest of genres. —N.Q.
3.
Qimir (The Acolyte)
First of all, it’s Manny Jacinto, a man with a jawline so sharp it could drill rocks in the sea. In The Acolyte, his tectonically angular face is framed by long emo-boy hair that totally works, especially because his performance gives just a hint of peak Tony Leung: aloof and a bit of a weirdo yet utterly charming and definitely dangerous. That edge is somewhat novel in Star Wars’s universe of smugglers, which typically feels bifurcated between scoundrels with a heart of gold and petty criminals who are rarely more than their base nature. Qimir feels like a different kind of cat. Who knows where The Acolyte will take this character, but in Jacinto’s hands, you really can’t take your eyes off him. —N.Q.
2.
Han Solo, original recipe (Star Wars: A New Hope)
Look, you can’t argue with the source. There’s a reason whole generations of Star Wars fans have had quiet fantasies of gleefully ruining their lives to be with this man. Harrison Ford forged an archetype: the skeptical rogue, a smirk king, He Who Shot First. You think he’s hot? He knows. Luke Skywalker may be the Golden Farmboy Hero of a Thousand Faces, but really, who dreams about running off with that guy? The appeal of Han Solo lies in how he’s basically someone you might actually bump into at a bar (or a cantina) — just give him a blaster, a big hairy buddy, and a sick-ass ship. —N.Q.
1.
Cassian Andor (Rogue One)
The only way forward for Star Wars as a franchise was to push against the nostalgia that had come to define this pop-culture behemoth. Han Solo was a generational icon, yes. But we needed new conflicted heroes, new smuggler hotties, new character arcs that reflect and refract this galaxy’s moral underpinnings and put unexpected spins on resistance. Diego Luna’s Cassian is that guy. From his introduction in Rogue One, shooting stormtroopers and an informer to save himself and carry information about the Death Star back to his comrades, to his expanded backstory in Tony Gilroy’sfranchise-best TV series Andor, Cassian has become the rugged-jawed, soulful-eyed, fuck-the-Empire smuggler for our current age. When he looks, you feel him looking: The heft of his gaze is a charged, invigorating thing; his growing moral clarity an infectious force. Think of his dreamy, stalwart expression when he listens to Nemik’s manifesto and hears “Remember this: try” — that’s the face of a man who will smuggle, lie, steal, or kill to create a better reality for all those living under subjugation and oppression, and that’s what Star Wars has always been about. What’s hotter than a man who realizes that revolutionary politics is the only way forward? Absolutely nothing. —R.H.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(135),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"4":4,"12":12,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(406),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"406":406,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]