Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(create-next-app): add --no-import-alias for non-interactive #62035

Merged
merged 5 commits into from
Feb 20, 2024

Conversation

kuzeykose
Copy link
Contributor

@kuzeykose kuzeykose commented Feb 14, 2024

What?

The create-next-app documentation under API reference says that;

Further, you can negate default options by prefixing them with --no- (e.g., --no-eslint).

When I tried to use --no-import-alias, I thought that it would automatically use the default alias (@/*), but it does not.

Why?

Each option has --no prefix control but import-alias has no --no prefix control to give default value to program.

In an Interactive approach, the user can select a prompt; Would you like to customize the default import alias (@/*)? No / Yes. If the user selects no, then the default alias is applied with @/*.

How?

Implementing a condition solve the problem for general purpose. If arguments includes --no-import-alias then the importAlias section automatically apply the default value.

@kuzeykose kuzeykose requested a review from a team as a code owner February 14, 2024 04:29
@ijjk ijjk added the create-next-app Related to our CLI tool for quickly starting a new Next.js application. label Feb 14, 2024
@@ -388,6 +388,8 @@ async function run(): Promise<void> {
if (ciInfo.isCI) {
// We don't use preferences here because the default value is @/* regardless of existing preferences
program.importAlias = defaults.importAlias
} else if (process.argv.includes('--no-import-alias')) {
program.importAlias = defaults.importAlias
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Currently our non-interactive tests specify the --import-alias="@/*" arg but this seems like a good alternative so the default doesn't need to be known. Could you update one of the tests doing the previous behavior with this instead?

x-ref:

@ijjk
Copy link
Member

ijjk commented Feb 14, 2024

Stats from current PR

Default Build
General
vercel/next.js canary rvetere/next.js canary Change
buildDuration 19.7s 19.9s ⚠️ +129ms
buildDurationCached 7.7s 6.9s N/A
nodeModulesSize 196 MB 196 MB
nextStartRea..uration (ms) 425ms 428ms N/A
Client Bundles (main, webpack)
vercel/next.js canary rvetere/next.js canary Change
1068-HASH.js gzip 30.3 kB 30.3 kB N/A
3f784ff6-HASH.js gzip 53.5 kB 53.5 kB N/A
4944-HASH.js gzip 5.04 kB 5.03 kB N/A
8423.HASH.js gzip 181 B 181 B
framework-HASH.js gzip 45.2 kB 45.2 kB
main-app-HASH.js gzip 243 B 242 B N/A
main-HASH.js gzip 32.1 kB 32.1 kB N/A
webpack-HASH.js gzip 1.7 kB 1.7 kB
Overall change 47.1 kB 47.1 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary rvetere/next.js canary Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary rvetere/next.js canary Change
_app-HASH.js gzip 196 B 196 B
_error-HASH.js gzip 184 B 183 B N/A
amp-HASH.js gzip 503 B 504 B N/A
css-HASH.js gzip 323 B 324 B N/A
dynamic-HASH.js gzip 2.5 kB 2.51 kB N/A
edge-ssr-HASH.js gzip 258 B 259 B N/A
head-HASH.js gzip 353 B 351 B N/A
hooks-HASH.js gzip 370 B 370 B
image-HASH.js gzip 4.21 kB 4.2 kB N/A
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.68 kB 2.67 kB N/A
routerDirect..HASH.js gzip 313 B 314 B N/A
script-HASH.js gzip 386 B 385 B N/A
withRouter-HASH.js gzip 309 B 311 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 931 B 931 B
Client Build Manifests
vercel/next.js canary rvetere/next.js canary Change
_buildManifest.js gzip 485 B 484 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary rvetere/next.js canary Change
index.html gzip 528 B 528 B
link.html gzip 540 B 541 B N/A
withRouter.html gzip 524 B 523 B N/A
Overall change 528 B 528 B
Edge SSR bundle Size
vercel/next.js canary rvetere/next.js canary Change
edge-ssr.js gzip 94.5 kB 94.5 kB N/A
page.js gzip 151 kB 151 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary rvetere/next.js canary Change
middleware-b..fest.js gzip 626 B 625 B N/A
middleware-r..fest.js gzip 151 B 151 B
middleware.js gzip 44.6 kB 44.6 kB N/A
edge-runtime..pack.js gzip 1.94 kB 1.94 kB
Overall change 2.1 kB 2.1 kB
Next Runtimes
vercel/next.js canary rvetere/next.js canary Change
app-page-exp...dev.js gzip 166 kB 166 kB
app-page-exp..prod.js gzip 95.9 kB 95.9 kB
app-page-tur..prod.js gzip 97.6 kB 97.6 kB
app-page-tur..prod.js gzip 92 kB 92 kB
app-page.run...dev.js gzip 136 kB 136 kB
app-page.run..prod.js gzip 90.6 kB 90.6 kB
app-route-ex...dev.js gzip 22 kB 22 kB
app-route-ex..prod.js gzip 14.9 kB 14.9 kB
app-route-tu..prod.js gzip 14.9 kB 14.9 kB
app-route-tu..prod.js gzip 14.6 kB 14.6 kB
app-route.ru...dev.js gzip 21.7 kB 21.7 kB
app-route.ru..prod.js gzip 14.6 kB 14.6 kB
pages-api-tu..prod.js gzip 9.47 kB 9.47 kB
pages-api.ru...dev.js gzip 9.74 kB 9.74 kB
pages-api.ru..prod.js gzip 9.47 kB 9.47 kB
pages-turbo...prod.js gzip 22.1 kB 22.1 kB
pages.runtim...dev.js gzip 22.7 kB 22.7 kB
pages.runtim..prod.js gzip 22.1 kB 22.1 kB
server.runti..prod.js gzip 50.1 kB 50.1 kB
Overall change 927 kB 927 kB
build cache
vercel/next.js canary rvetere/next.js canary Change
0.pack gzip 1.55 MB 1.55 MB N/A
index.pack gzip 104 kB 104 kB N/A
Overall change 0 B 0 B
Commit: e64ffde

@kuzeykose
Copy link
Contributor Author

I updated a test from pages and a test from app.

  • Local tests are passed.

for pages:

...

    [TEST] $ /Users/kuzeykose/Developer/next.js/packages/create-next-app/dist/index.js javascript-test --js --no-tailwind --eslint --src-dir --no-app --no-import-alias {
      options: {
        cwd: '/var/folders/gf/ywpfzlgs0fvdjjy7p33c756w0000gn/T/next-test-cdnymn938t'
      }
    }

      at log (integration/create-next-app/lib/utils.ts:33:11)

   ▲ Next.js 14.1.1-canary.54
   - Local:        http://localhost:62608

 ✓ Ready in 2.5s
 ○ Compiling / ...
 ✓ Compiled / in 1020ms (291 modules)
 ✓ Compiled /api/hello in 26ms (82 modules)
   ▲ Next.js 14.1.1-canary.54
   - Local:        http://localhost:62621

 ✓ Ready in 1028ms
 ○ Compiling / ...
 ✓ Compiled / in 918ms (291 modules)
 ✓ Compiled /api/hello in 26ms (82 modules)

...

 PASS  test/integration/create-next-app/templates-pages.test.ts (77.905 s)
  create-next-app templates
    ✓ should prompt user to choose if --ts or --js is not provided (7521 ms)
    ✓ should create TS projects with --ts, --typescript (13703 ms)
    ✓ should create TS projects with --ts, --typescript --src-dir (12984 ms)
    ✓ should create JS projects with --js, --javascript (12977 ms)
    ✓ should create JS projects with --js, --javascript --src-dir (12707 ms)
    ✓ should prompt user to choose if --import-alias is not provided (7058 ms)
    ✓ should work with --tailwind and --src together (4413 ms)
    ✓ should prompt user to choose if --tailwind or --no-tailwind is not provided (6145 ms)

Test Suites: 1 passed, 1 total
Tests:       8 passed, 8 total
Snapshots:   1 passed, 1 total
Time:        77.936 s

for app:

...

    [TEST] $ /Users/kuzeykose/Developer/next.js/packages/create-next-app/dist/index.js appdir-test --js --no-tailwind --app --eslint --src-dir --no-import-alias {
      options: {
        cwd: '/var/folders/gf/ywpfzlgs0fvdjjy7p33c756w0000gn/T/next-test-ic7b511dvtq',
        stdio: 'inherit'
      }
    }

      at log (integration/create-next-app/lib/utils.ts:33:11)


 RUNS  test/integration/create-next-app/templates-app.test.ts
Creating a new Next.js app in /private/var/folders/gf/ywpfzlgs0fvdjjy7p33c756w0000gn/T/next-test-ic7b511dvtq/appdir-test.

Using pnpm.

Initializing project with template: app


Installing dependencies:
- react
- react-dom
- next

Installing devDependencies:
- eslint
- eslint-config-next
 RUNS  test/integration/create-next-app/templates-app.test.ts
Packages: +294
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 RUNS  test/integration/create-next-app/templates-app.test.ts

dependencies:
+ next 14.1.1-canary.54
+ react 18.2.0
+ react-dom 18.2.0

devDependencies:
+ eslint 8.56.0
+ eslint-config-next 14.1.1-canary.54

Done in 5.3s
Initialized a git repository.

Success! Created appdir-test at /private/var/folders/gf/ywpfzlgs0fvdjjy7p33c756w0000gn/T/next-test-ic7b511dvtq/appdir   ▲ Next.js 14.1.1-canary.54
   - Local:        http://localhost:62779

 ✓ Ready in 2.5s
 ○ Compiling / ...
 ✓ Compiled / in 1576ms (519 modules)
   ▲ Next.js 14.1.1-canary.54
   - Local:        http://localhost:62791

 ✓ Ready in 1115ms
 ○ Compiling / ...
 ✓ Compiled / in 1280ms (519 modules)

...

  PASS  test/integration/create-next-app/templates-app.test.ts (55.119 s)
  create-next-app --app
    ✓ should create TS appDir projects with --ts (13864 ms)
    ✓ should create JS appDir projects with --js (13455 ms)
    ✓ should create JS appDir projects with --js --src-dir (13556 ms)
    ✓ should create Tailwind CSS appDir projects with --tailwind (13907 ms)

Test Suites: 1 passed, 1 total
Tests:       4 passed, 4 total
Snapshots:   0 total
Time:        55.144 s, estimated 58 s

@styfle styfle added the CI approved Approve running CI for fork label Feb 20, 2024
@styfle styfle enabled auto-merge (squash) February 20, 2024 15:22
@styfle styfle merged commit 09c0065 into vercel:canary Feb 20, 2024
64 checks passed
@github-actions github-actions bot added the locked label Mar 6, 2024
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 6, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
CI approved Approve running CI for fork create-next-app Related to our CLI tool for quickly starting a new Next.js application. locked
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants