Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Writing Codemods with jscodeshift
Search
Matija Marohnić
February 21, 2018
Programming
69
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Writing Codemods with jscodeshift
Matija Marohnić
February 21, 2018
More Decks by Matija Marohnić
See All by Matija Marohnić
oxlint & oxfmt: linting and formatting from the future
silvenon
0
36
Goodbye jsdom/happy-dom, hello Vitest Browser Mode!
silvenon
0
29
Introduction to Remix
silvenon
0
170
Cypress vs. Playwright
silvenon
0
180
Studying Strapi: an open source head headless CMS
silvenon
0
58
CSS Specificity
silvenon
0
64
Make your JavaScript projects more accessible to newcomers
silvenon
0
98
React Hooks
silvenon
0
98
PostCSS
silvenon
0
67
Other Decks in Programming
See All in Programming
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
200
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
170
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
270
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
3.8k
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.2k
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
220
バグを直したら useEffect が消えた
colorful12
3
770
プロポーザルを書いてもらう
pvcresin
0
590
MySQLとPostgreSQLって何が違うの?
akagami
0
150
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
110
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
170
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.1k
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
430
Building Adaptive Systems
keathley
44
3.2k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Claude Code のすすめ
schroneko
67
230k
Practical Orchestrator
shlominoach
191
12k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
The SEO identity crisis: Don't let AI make you average
varn
0
540
It's Worth the Effort
3n
188
29k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Exploring anti-patterns in Rails
aemeredith
3
480
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Transcript
Writing Codemods with jscodeshift
Matija Marohnić @silvenon
Refactoring • changing dependencies • improving the codebase
› npm outdated A New Project
autoprefixer 6.7.7 6.7.7 8.0.0 your-project babel-eslint 8.0.0 8.2.1 8.2.1 your-project
css-loader 0.26.4 0.26.4 0.28.9 your-project dotenv 4.0.0 4.0.0 5.0.0 your-project eslint-plugin-react 7.4.0 7.6.1 7.6.1 your-project Day One
autoprefixer 6.7.7 6.7.7 8.0.0 your-project babel-eslint 8.0.0 8.2.1 8.2.1 your-project
css-loader 0.26.4 0.26.4 0.28.9 your-project dotenv 4.0.0 4.0.0 5.0.0 your-project eslint-plugin-react 7.4.0 7.6.1 7.6.1 your-project file-loader 0.10.1 0.10.1 1.1.6 your-project flow-bin 0.61.0 0.61.0 0.65.0 your-project flow-typed 2.2.3 2.3.0 2.3.0 your-project jest 22.0.1 22.3.0 22.3.0 your-project lodash 4.17.4 4.17.5 4.17.5 your-project nock 9.1.5 9.1.6 9.1.6 your-project node-sass 4.5.3 4.7.2 4.7.2 your-project nodemon 1.14.11 1.14.12 1.14.12 your-project postcss-loader 1.3.3 1.3.3 2.1.0 your-project query-string 4.3.4 4.3.4 5.1.0 your-project react-dates 16.2.1 16.3.0 16.3.0 your-project react-draggable 3.0.3 3.0.5 3.0.5 your-project react-router 3.0.5 3.2.0 4.2.0 your-project react-virtualized 9.12.0 9.18.5 9.18.5 your-project redux-form 7.0.4 7.2.3 7.2.3 your-project style-loader 0.13.2 0.13.2 0.20.1 your-project url-loader 0.5.9 0.5.9 0.6.2 your-project Day Three
Let's just say that we update things a lot!
const styleSheet = () => ({ toolbar: { margin: [10,
"auto"] } }) Example
const styleSheet = () => ({ toolbar: { margin: "10px
auto" } }) Example
const styleSheet = theme => ({ toolbar: { margin: [10,
theme.spacing.unit] } }) Example
const styleSheet = theme => ({ toolbar: { margin: `10px
${theme.spacing.unit}px` } }) Example
Search & Replace /!/g It needs to understand the syntax
AST • Abstract Syntax Tree • represents code structure •
source vs desired result
Codemods • scripts for refactoring • use AST • easily
testable
Codemods › jscodeshift -t codemod.js <target> <target> can be a
file or folder
Pros • faster iterations of ideas • up-to-date with dependencies
• work on multiple codebases
cpojer/js-codemod • collection of codemods to transform code to next
generation JS
cpojer/js-codemod •arrow-function.js •no-vars.js •template-literals.js
reactjs/react-codemod • collection of codemods that help update React APIs
reactjs/react-codemod •pure-component.js •error-boundaries.js •findDOMNode.js
Let's See a Codemod for our styleSheet Example "
Cons • many AST variations • lacking documentation • big
learning curve
Photo by Alex Boyd on Unsplash Be Patient, Go to
Sleep and Try Again Tomorrow