Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Writing Codemods with jscodeshift
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Matija Marohnić
February 21, 2018
Programming
76
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
41
Goodbye jsdom/happy-dom, hello Vitest Browser Mode!
silvenon
0
32
Introduction to Remix
silvenon
0
170
Cypress vs. Playwright
silvenon
0
190
Studying Strapi: an open source head headless CMS
silvenon
0
63
CSS Specificity
silvenon
0
72
Make your JavaScript projects more accessible to newcomers
silvenon
0
99
React Hooks
silvenon
0
100
PostCSS
silvenon
0
67
Other Decks in Programming
See All in Programming
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.8k
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
720
WebAssembly in Android Apps 〜 WASMはJNIの夢を見るか
keiji
1
110
Building an Out-of-Order CPU
latte72
1
790
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.5k
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.3k
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
260
XHTMLが残したもの
yosuke_furukawa
PRO
2
810
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
430
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
4
2.5k
Family mrubyの進捗
kishima
1
130
Heart of Swift Concurrency
koher
0
890
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
400
Design in an AI World
tapps
1
320
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
First, design no harm
axbom
PRO
2
1.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Agile that works and the tools we love
rasmusluckow
331
22k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
480
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
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