Miranda July’s best book yet is a spectacularly horny story about pursuing sexual and creative freedom.
ByEmily Gould,
a novelist, critic, and features writer for New York Magazine.She writes the ‘Going Through It' advice column and is most recently the author of ‘Perfect Tunes.’
Photo: Getty Images
Photo: Getty Images
Photo: Getty Images
This review contains spoilers for Miranda July’s novel All Fours.
At a gynecologist appointment about halfway through Miranda July’s new novel, All Fours, the narrator finds herself seated in a waiting room with two other women, one young and pregnant and the other about 75. She imagines the pregnant woman’s thoughts: “She was in the midst of something very exciting, very right, and after this phase there would be a baby, and it was unclear what would happen to her after that but probably more good stuff! Better and better!” Then she tries to wrap her mind around what’s going on between the older woman’s legs: “gray labia, long and loose, ball sacks emptied of their balls.” In between these two poles the narrator sits, age 45. She’s done with reproduction, so there’s nothing to look forward to except ball-sack labia … unless, somehow, she finds some new adventure to fill the terrifying blank space looming in the middle of her life! Doing so will require finding an escape portal from her current existence, if she’s only brave and reckless enough to find that portal and enter.
The narrator is an L.A.-based multimedia artist — “picture a woman who had success in several mediums at a young age” — not unlike Miranda July. Also like July, she is queer and married to a man, a fellow creative type, raising a nonbinary child. She is haunted by literal and metaphorical death. Her child was almost stillborn. Her grandmother jumped out of a window at age 55 because “she couldn’t bear to see her looks go,” and then 23 years later, her aunt jumped out of the same window. But while the narrator is ruminating on the death-in-life that looms for women when they run out of estrogen, she is, for what she fears is a limited time only, hornier than a teenage boy. She masturbates, over the course of the novel, approximately ten times, has sex nine times, and at one point experiences an exquisite moment of intimacy when someone else removes her bloody tampon.
Before reading All Fours, I was a Miranda July agnostic. I liked her quirky, character-driven movies fine. Her previous books, the story collection No One Belongs Here More Than You and novel The Last Bad Man, with their casts of lonely, idiosyncratic personalities, left me feeling respectful but essentially unmoved, like, “Okay, here’s another thing July has proved she can do.” But All Fours possessed me. I picked it up and neglected my life until the last page, and then I started begging every woman I know to read it as soon as possible.
I’ve never read a novel where perimenopause is so explicitly foregrounded, which is strange, because it’s a cascade of disruptive changes that happen to approximately half the population for about ten years before their periods finally stop. The narrator becomes haunted by a chart she discovers online titled “Sex Hormones Over Life Span,” which she interprets to mean she has only a brief window left in her life during which she might experience sexual desire. The tension that propels the book becomes: Can the narrator avoid destroying her marriage and her relationship with her kid while still pursuing the total sexual and creative freedom that her countdown clock requires? And if so, how?
At the novel’s outset, sex with the narrator’s husband, Harris, is fine, occasionally better than fine, but requires some mental warm-up, maybe some props. She never craves it, exactly, but appreciates its necessity in the context of her marriage: “Sometimes I could hear Harris’s dick whistling impatiently like a teakettle, at higher and higher pitches until I finally couldn’t take it so I initiated.” She compares notes with her lesbian friend Jordi and determines that her approach to sex is “mind-rooted,” while Jordi’s is “body-rooted.” Jordi describes typical sex with her wife — half-asleep, grappling like “two cavewomen” — in a way that leaves the narrator stupefied. Having that kind of sex seems permanently outside her grasp, not destined to happen in this lifetime.
Then one day an unexpected payment arrives for 20 grand, and the narrator decides to blow it all on a trip to New York, where she’ll stay in a fancy hotel alone, see friends and art, and refill her creative well. She decides to drive cross-country to get there, prolonging the trip from one week to two, longer than she’s ever spent away from her kid. She seems poised to do something that will change her life, the kind of thing we expect to happen in New York, which is traditionally a great place to try on a new persona or have a meaningless affair. But, instead, she stops the car 30 miles outside of L.A. in a town called Monrovia, where she books a cheap motel room and begins a bizarre and magical interregnum.
There, she spends the whole 20 grand redecorating her motel room completely, redoing the wallpaper and lighting, transforming it into a perfect feminine oasis that smells like tonka bean. It’s in this pink-lit room where she begins a relationship with Davey, a man she meets in Monrovia, that’s as erotically charged as a teen romance — every accidental brush of skin makes both of them woozy with desire. Davey turns out to be a worshipful fan of the narrator’s work. He is also married, so they can’t have sex, which only makes their almost-sex hotter. When the narrator video-chats with Harris and her child, the fancied-up motel room helps her to maintain the fiction that she has finished driving cross-country and is now in New York.
It’s impossible to overemphasize how debilitatingly horny the narrator is during this period of the novel. When she isn’t with Davey, she does little but jerk off to fantasies of him that become increasingly baroque. “Often I rode him slowly for a very long time, like an old hunched man on an exhausted pony with a steady gait, riding and riding until I c-a-m-e,” July writes.
But in a twist, Davey isn’t even the first new person the narrator has sex with. Bereft after he definitively rejects physically consummating their relationship, she turns to an older woman named Audra, who also once had an affair with Davey. As the narrator masturbates while listening to Audra recount every detail of sex with Davey, she slowly realizes that Audra is masturbating, too. At first, she’s repulsed. Then, she’s aroused. What follows is the most bizarre yet simultaneously hot sex scene I have ever read. It has the swollen immediacy of user-generated erotic fan fiction, as if someone with Miranda July’s masterful control of tone was writing on literotica.com. “It was like breaking through the surface of the water after swimming blindly for fifteen years,” she thinks. Talk about body-rooted.
The new life she has been craving has now begun, albeit not in the way she’d wanted or expected. “I’d thought the two paths were: sex with Davey vs. a life of bitterness and regret. But maybe the road split between: a life spent longing vs. a life that was continually surprising.” She begins hormone replacement therapy, rubbing a bioidentical cream into her inner thigh and taking progesterone pills. She also starts training like an athlete in what sounds like a cross-fit gym, quickly transforming into someone who can take ass selfies with pride.
This transformation, like all transformations, has a stage where it’s messy and painful — the caterpillar in the chrysalis has to become goo prior to becoming a butterfly. When she confesses her infidelity to Harris, the moment is fraught: The terrifying possibility of divorce has been looming in her mind. But when he asks if it will happen again and she answers truthfully, he asks only for a reciprocal arrangement for himself.
From then on, she spends Wednesday nights in the motel room, and Harris spends Monday nights in his music studio. They decide to stop having a sexual relationship with each other. Instead, they’ll stay partners, co-living and co-parenting, and have sex with other people on their appointed days: “I could remain with him and our child in our house, as I really was.” In the blink of an eye, they both have girlfriends.
Memoirs about marital upheaval — Rachel Cusk’s Aftermath, Deborah Levy’s Real Estate, Leslie Jamison’s Splinters — tend to see their narrators divorced and punished. They suffer the loss of child custody, of community status, or their former homes. Even if a new life awaits on the other side of these books’ portrayals of midlife crises, that next chapter feels eked out, carved from the ruins of what came before, which must be deeply mourned. At the midpoint of All Fours, I expected some similar punishment to befall the narrator. But none of these things happen, or they don’t happen the way we’ve been conditioned to expect them to. For every micro-loss, the narrator gains something more valuable on the other side of her break with convention.
Is keeping only the good aspects of married family life and having an independent sexual and creative life something that can only happen in fiction? Is it too utopian to be believable? The book’s antic tone sometimes distracts from the story’s genuinely high stakes — July is never far from a joke, even in serious moments. The narrator wouldn’t be able to laugh at herself like this if what she was going through was actually super-painful, right? But in smaller moments and gestures, like when we see her obsessively packing five-part bento-box lunches for her kid, we glimpse real pain behind the character’s kooky defense mechanisms, as well as a desperate and futile attempt to cling to control that can only be abolished with a grand gesture like bifurcating her personal and domestic lives. We’re left with an abiding sense that the narrator has achieved, with no small amount of effort, something meaningful and necessary by building that magical motel room. It’s a place where she can visit with friends, masturbate, have sex, and be free of every domestic duty. Wednesdays are an escape from her real life, and also they make surviving her real life possible.
The last third of the book does hint that having your cake and eating it too is not without its discontents. When her new girlfriend dumps her, the narrator experiences the surreal weirdness of being at home with her husband and child while nursing a broken heart. A description of playing LEGOs with her child while coming to terms with her breakup gave me a pang of recognition; what parent can’t relate to having to conceal one’s inconvenient emotional meltdowns from a kid who just wants to show you the cool thing they’ve built in the corner of the living room? (“It’s wonderful, hon. So blocky,” she says.) And when the narrator tells her friends the new rules of her marriage, expecting at least some of them to follow through on their own avowed plans to jump ship, none of them are rushing to follow in her footsteps. “It was like we had all agreed to sneak into the haunted house together, but once inside, giggling and full of nerves, I looked back and discovered that I was alone. Everyone else had chickened out.” Turns out, not everyone’s definition of having a sanctuary of the self entails having a life partner you don’t fuck.
Virginia Woolf was 47 when she wrote that enduring line about a room of one’s own. The possibility of having a place that’s entirely yours, in which to be yourself completely, is this book’s most comforting and enduring fantasy. Women are told all the time to carve out space and time for themselves away from their partners and children, but no one ever comes out and says exactly how we’re supposed to pull that off. Reading about the motel-room solution had me searching Listings Project for studio spaces and pricing out what it would take to build my own meager version of that perfumed, pink-wallpapered sanctuary (too much, probably). But regardless of the specifics, Miranda July has given women in their 40s something totally new to want, plus permission to want it. Like all the best gifts, this one was entirely unexpected.
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();
// ]]