Language-tools: ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” typescript + svelte-preprocessor ํ™•์ธ ๋ฐ ๋ฌธ์„œํ™”

์— ๋งŒ๋“  2020๋…„ 06์›” 04์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: sveltejs/language-tools

์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์ด svelte ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  svelte-preprocessor๋ฅผ ์œ„ํ•œ ๋…ธ๋“œ ๋ชจ๋“ˆ์„ ํฌํ•จํ•˜์—ฌ lang='ts' ์ง€์›์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋ฉ”๋ชจ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š” ๐Ÿ‘

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@elvtcc ์ €๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. main.js ์ด main.ts
  2. ๊ทธ๋ฆฌ๊ณ  rollup.config.json ์—์„œ input: 'src/main.js' ์—์„œ input: 'src/main.ts' ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    (์ฐธ๊ณ : tsconfig.json ๋„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค)

์•Œ๊ณ , dummdidumm์ด entry file (main.js) has still to be a javascript file ๋ผ๊ณ  ๋งํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  14 ๋Œ“๊ธ€

๋งค๋ ฅ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค https://github.com/dummdidumm/template

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒ„์ „๊ณผ์˜ ์ฐจ์ด์ 

  • ๋‹ค์Œ npm ํŒจํ‚ค์ง€๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. svelte-preprocess typescript tslib @rollup/plugin-typescript
  • rollup.config.js ๊ฐœ์„ :
// ...
import sveltePreprocess from 'svelte-preprocess';
import typescript from '@rollup/plugin-typescript';

// ...
  plugins: [
    svelte({
      // ...
      preprocess: sveltePreprocess(), // <--
    }),

    // ...
    commonjs(),
    typescript(), // <-- added below commonjs
    // ...

์ฃผ์˜ ์‚ฌํ•ญ:

  • ํ•ญ๋ชฉ ํŒŒ์ผ( main.js )์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค!

__๋ชจ๋“  ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!__ ํ…œํ”Œ๋ฆฟ์— tsconfig.json ํŒŒ์ผ์ด ๋ˆ„๋ฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

rollup v1.32.1
bundles src/main.js โ†’ public/build/bundle.js...
(!) Plugin typescript: @rollup/plugin-typescript TS18003: No inputs were found in config file 'tsconfig.json'. Specified 'include' paths were '["**/*"]' and 'exclude' paths were '[]'.
[!] (plugin typescript) Error: @rollup/plugin-typescript: Couldn't process compiler options
Error: @rollup/plugin-typescript: Couldn't process compiler options
  at error (/Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/node-entry.js:5400:30)

๋‹ค์Œ tsconfig.json ๋‚ด์šฉ ๊ดœ์ฐฎ๋‚˜์š”?

{
  "include": ["src/**/*"],
  "exclude": ["node_modules/*"],
  "compilerOptions": {
    "target": "es2017",
    "types": ["svelte"],
    "moduleResolution": "node"
  }
}
rollup v1.32.1
bundles src/main.js โ†’ public/build/bundle.js...
(!) Plugin typescript: @rollup/plugin-typescript TS18003: No inputs were found in config file '/Users/bgd/Documents/Projects/Essential modules/tsconfig.json'. Specified 'include' paths were '["src/**/*"]' and 'exclude' paths were '["node_modules/*"]'.
[!] (plugin typescript) Error: @rollup/plugin-typescript: Couldn't process compiler options
Error: @rollup/plugin-typescript: Couldn't process compiler options
    at error (/Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/node-entry.js:5400:30)
    at throwPluginError (/Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/node-entry.js:11878:12)
    at Object.error (/Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/node-entry.js:12912:24)
    at emitParsedOptionsErrors (/Users/bgd/Documents/Projects/Essential modules/node_modules/@rollup/plugin-typescript/dist/index.js:310:17)
    at Object.buildStart (/Users/bgd/Documents/Projects/Essential modules/node_modules/@rollup/plugin-typescript/dist/index.js:469:13)
    at /Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/node-entry.js:13117:25
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async Promise.all (index 2)

์ถœ์ฒ˜: https://codechips.me/how-to-use-typescript-with-svelte/

์žฌ๋ฏธ์žˆ๋„ค์š”... tsconfig.json ๋„ ํ•„์š”์—†์–ด์„œ ๊ทธ๋ƒฅ ๋†”๋’€์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ์˜ค๋ฅ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

sapper์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

$ sapper dev
โœ— server
@rollup/plugin-typescript: Couldn't process compiler options
โœ— client
@rollup/plugin-typescript: Couldn't process compiler options
internal/modules/cjs/loader.js:584
    throw err;

export const preprocess = sveltePreprocess({
  postcss: true,
  style: sass(),
})

 plugins: [ 
    ...
    ...
    svelte({
        dev,
        hydratable: true,
        emitCss: true,
        preprocess,
      }),

     ...
    ....
     commonjs(),
      typescript(),

ํ…œํ”Œ๋ฆฟ์€ IDE๊ฐ€ svelte์™€ ํ•จ๊ป˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฐœ๋… ์ฆ๋ช…์œผ๋กœ ์˜๋„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. tsconfig.json ๋˜๋Š” Sapper์™€ ๊ฐ™์€ ๊ฒƒ์€ ๊ทธ ๋‹น์‹œ ์ œ ๋งˆ์Œ์— ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ Sapper๊ฐ€ ํฌํ•จ๋œ Typescript๋Š” ํ˜„์žฌ ์ž˜ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. @benmccann์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

Sapper์™€์˜ ์ž‘์—…์ด ๊ฑฐ์˜ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Sapper๋Š” TypeScript์™€ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜๋ฅผ ์‚ผํ‚ต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ master ์—์„œ ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ ์•„์ง ๋ฆด๋ฆฌ์Šค๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— "์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ"๋งŒ ํ‘œ์‹œ๋˜๊ณ  ๋” ์œ ์šฉํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์•„์ง preload ๋œ ํ…œํ”Œ๋ฆฟ์—๋Š” TypeScript๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ณด๋ฅ˜ ์ค‘์ธ PR์ด ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/sveltejs/sapper/pull/1222

์œ„์˜ ์ˆ˜์ • ์‚ฌํ•ญ์ด ๋ณ‘ํ•ฉ๋˜์–ด ๋ฆด๋ฆฌ์Šค๋  ๋•Œ๊นŒ์ง€ TypeScript์—์„œ ์ฝ”๋”ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Sapper ํฌํฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/sveltejs/sapper/issues/760#issuecomment -634423518

@dummdidumm ๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ™‚

๋ถˆํ–‰ํžˆ๋„ ๋ฌธ์ œ๊ฐ€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด package.json ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

{
  "name": "svelte-app",
  "version": "0.0.1",
  "scripts": {
    "build": "npm install && rollup -c",
    "dev": "npm install && rollup -c -w",
    "start": "sirv public --single",
    "lint": "eslint . --ext .js,.svelte; exit 0",
    "lint-report": "eslint . --ext .js,.svelte -o ./.eslint-report.html -f html; exit 0"
  },
  "devDependencies": {
    "@rollup/plugin-commonjs": "11.0.2",
    "@rollup/plugin-node-resolve": "^7.0.0",
    "@rollup/plugin-typescript": "^4.1.2",
    "eslint": "^7.0.0",
    "eslint-config-standard": "^14.1.1",
    "eslint-plugin-import": "^2.20.2",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-promise": "^4.2.1",
    "eslint-plugin-standard": "^4.0.1",
    "eslint-plugin-svelte3": "^2.7.3",
    "rollup": "^1.20.0",
    "rollup-plugin-livereload": "^1.0.0",
    "rollup-plugin-svelte": "^5.0.3",
    "rollup-plugin-terser": "^5.1.2",
    "svelte": "^3.0.0",
    "svelte-preprocess": "^3.8.0",
    "tslib": "^2.0.0",
    "typescript": "^3.9.5"
  },
  "dependencies": {
    "page": "^1.11.6",
    "sirv-cli": "^0.4.4"
  }
}

rollup.config.js ํŒŒ์ผ:

import svelte from "rollup-plugin-svelte";
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import livereload from "rollup-plugin-livereload";
import { terser } from "rollup-plugin-terser";
import autoPreprocess from "svelte-preprocess";
import typescript from "@rollup/plugin-typescript";

const production = !process.env.ROLLUP_WATCH;

export default {
  input: "src/main.js",
  output: {
    sourcemap: true,
    format: "iife",
    name: "app",
    file: "public/build/bundle.js"
  },
  plugins: [
    svelte({
      // enable run-time checks when not in production
      dev: !production,
      // we'll extract any component CSS out into
      // a separate file - better for performance
      css: css => {
        css.write("public/build/bundle.css");
      },
      preprocess: autoPreprocess()
    }),

    // If you have external dependencies installed from
    // npm, you'll most likely need these plugins. In
    // some cases you'll need additional configuration -
    // consult the documentation for details:
    // https://github.com/rollup/plugins/tree/master/packages/commonjs
    resolve({
      browser: true,
      dedupe: ["svelte"]
    }),
    commonjs(),
    typescript(),

    // In dev mode, call `npm run start` once
    // the bundle has been generated
    !production && serve(),

    // Watch the `public` directory and refresh the
    // browser on changes when not in production
    !production && livereload("public"),

    // If we're building for production (npm run build
    // instead of npm run dev), minify
    production && terser()
  ],
  watch: {
    clearScreen: false
  }
};

function serve () {
  let started = false;

  return {
    writeBundle () {
      if (!started) {
        started = true;

        require("child_process").spawn("npm", ["run", "start", "--", "--dev"], {
          stdio: ["ignore", "inherit", "inherit"],
          shell: true
        });
      }
    }
  };
}

์˜ค๋ฅ˜๋ฅผ ์ง์ ‘ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ package.json ๋ฅผ ๋ณด๋ฉด 2.x ๋Œ€์‹  ๋กค์—… 1.x ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ข…์†์„ฑ์„ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์ถฉ๋Œํ•˜๋ฉด ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@dummdidumm ๋ชจ๋“  ์ข…์†์„ฑ์„ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์ถฉ๋Œ tsconfig.json ํŒŒ์ผ, package-lock.json ํŒŒ์ผ ๋ฐ node_modules ํด๋”๋ฅผ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์ง€์†๋ฉ๋‹ˆ๋‹ค ๐Ÿค”

์—๋Ÿฌ ๋ฉ”์‹œ์ง€:

rollup v2.15.0
bundles src/main.js โ†’ public/build/bundle.js...
(!) Plugin typescript: @rollup/plugin-typescript TS18003: No inputs were found in config file 'tsconfig.json'. Specified 'include' paths were '["**/*"]' and 'exclude' paths were '[]'.
[!] (plugin typescript) Error: @rollup/plugin-typescript: Couldn't process compiler options
Error: @rollup/plugin-typescript: Couldn't process compiler options
    at error (/Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/rollup.js:213:30)
    at throwPluginError (/Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/rollup.js:17117:12)
    at Object.error (/Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/rollup.js:17911:24)
    at emitParsedOptionsErrors (/Users/bgd/Documents/Projects/Essential modules/node_modules/@rollup/plugin-typescript/dist/index.js:310:17)
    at Object.buildStart (/Users/bgd/Documents/Projects/Essential modules/node_modules/@rollup/plugin-typescript/dist/index.js:469:13)
    at /Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/rollup.js:18109:25
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async Promise.all (index 2)
    at Object.rollupInternal (/Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/rollup.js:19099:9)
    at Task.run (/Users/bgd/Documents/Projects/Essential modules/node_modules/rollup/dist/shared/watch.js:715:28)

์„ค์น˜๋œ Svelte VS Code ํ™•์žฅ:

  • Svelte 3 ์Šค๋‹ˆํŽซ - v0.4.0
  • Svelte ๋ฒ ํƒ€ - v99.0.41
  • ๋‚ ๋ ตํ•œ Intellisense - v0.7.1

์„ค์น˜๋œ ๊ธฐํƒ€ VS Code ํ™•์žฅ:

  • ์ž๋™ ๋‹ซ๊ธฐ ํƒœ๊ทธ - v0.5.7
  • ๋ธŒ๋ž˜ํ‚ท ์Œ Colorizer - v1.0.61
  • ESLint - v2.1.5
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ถ€์Šคํ„ฐ - v0.12.3
  • ์žฌ๋ฃŒ ์•„์ด์ฝ˜ ํ…Œ๋งˆ - v4.1.0
  • ๋„ค์ดํ‹ฐ๋ธŒ์Šคํฌ๋ฆฝํŠธ - v0.11.0
  • ๋„ค์ดํ‹ฐ๋ธŒ์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ - v2.11.10
  • npm - v0.3.12
  • npm ์ธํ…”๋ฆฌ์„ผ์Šค - v1.3.0
  • ๊ฒฝ๋กœ Intellisense - v2.2.0
  • PHP ์ธํ…”๋ ˆํŽœ์Šค - v1.4.1
  • ๋‚˜๋ญ‡๊ฐ€์ง€ ์–ธ์–ด 2 - v0.9.1
  • ๋ฒ ํˆฌ๋ฅด - v0.24.0

package.json ํŒŒ์ผ:

{
  "name": "svelte-app",
  "version": "0.0.1",
  "scripts": {
    "build": "npm install && rollup -c",
    "dev": "npm install && rollup -c -w",
    "start": "sirv public --single",
    "lint": "eslint . --ext .js,.svelte; exit 0",
    "lint-report": "eslint . --ext .js,.svelte -o ./.eslint-report.html -f html; exit 0"
  },
  "devDependencies": {
    "@rollup/plugin-commonjs": "^13.0.0",
    "@rollup/plugin-node-resolve": "^8.0.1",
    "@rollup/plugin-typescript": "^4.1.2",
    "eslint": "^7.2.0",
    "eslint-config-standard": "^14.1.1",
    "eslint-plugin-import": "^2.21.2",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-promise": "^4.2.1",
    "eslint-plugin-standard": "^4.0.1",
    "eslint-plugin-svelte3": "^2.7.3",
    "rollup": "^2.15.0",
    "rollup-plugin-livereload": "^1.3.0",
    "rollup-plugin-svelte": "^5.2.2",
    "rollup-plugin-terser": "^6.1.0",
    "svelte": "^3.23.1",
    "svelte-preprocess": "^3.9.7",
    "tslib": "^2.0.0",
    "typescript": "^3.9.5"
  },
  "dependencies": {
    "page": "^1.11.6",
    "sirv-cli": "^0.4.6"
  }
}

rollup.config.js ํŒŒ์ผ:

import svelte from "rollup-plugin-svelte";
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import livereload from "rollup-plugin-livereload";
import { terser } from "rollup-plugin-terser";
import autoPreprocess from "svelte-preprocess";
import typescript from "@rollup/plugin-typescript";

const production = !process.env.ROLLUP_WATCH;

export default {
  input: "src/main.js",
  output: {
    sourcemap: true,
    format: "iife",
    name: "app",
    file: "public/build/bundle.js"
  },
  plugins: [
    svelte({
      dev: !production,
      css: css => {
        css.write("public/build/bundle.css");
      },
      preprocess: autoPreprocess()
    }),
    resolve({
      browser: true,
      dedupe: ["svelte"]
    }),
    commonjs(),
    typescript(),
    !production && serve(),
    !production && livereload("public"),
    production && terser()
  ],
  watch: {
    clearScreen: false
  }
};

function serve () {
  let started = false;

  return {
    writeBundle () {
      if (!started) {
        started = true;

        require("child_process").spawn("npm", ["run", "start", "--", "--dev"], {
          stdio: ["ignore", "inherit", "inherit"],
          shell: true
        });
      }
    }
  };
}

svelte.config.js ํŒŒ์ผ:

const autoPreprocess = require("svelte-preprocess");

module.exports = {
  preprocess: [
    autoPreprocess()
  ]
};

@elvtcc ์ €๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. main.js ์ด main.ts
  2. ๊ทธ๋ฆฌ๊ณ  rollup.config.json ์—์„œ input: 'src/main.js' ์—์„œ input: 'src/main.ts' ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    (์ฐธ๊ณ : tsconfig.json ๋„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค)

์•Œ๊ณ , dummdidumm์ด entry file (main.js) has still to be a javascript file ๋ผ๊ณ  ๋งํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งค์šฐ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์— ์—ฌ์ „ํžˆ Vodoo๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์ž‘๋™ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” ํ•ต์‹ฌ svelte repo๋กœ ๊ฐ€์„œ ๊ฑฐ๊ธฐ์—์„œ ๊ณต์‹์ ์ธ typescript ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@AlexandreCantin @elvtcc

repo๋ฅผ ๋ณด๋ฉด /src ๋””๋ ‰ํ† ๋ฆฌ( stuff.ts )์— Typescript ํŒŒ์ผ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. Typescript์—์„œ ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ tsconfig.json ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ main.ts ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ฒˆ๋“ค ์ฝ”๋“œ์—์„œ ์ž๋™ ์ƒ์„ฑ๋œ ์ด์ƒํ•œ commonjs ๋ชจ๋“ˆ ๋‚ด๋ณด๋‚ด๊ธฐ exports not found ๋กœ ์ธํ•ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์Šคํƒ€์ผ์ด ์ด๊ฒƒ์„ ๊ณ ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค).

์ž‘๋™ํ•˜๋Š” ๊ฒƒ์€ /src (์›ํ•˜๋Š” ๊ฒฝ์šฐ tsconfig.json ์—†์ด) ์•ˆ์— empty.ts (๋˜๋Š” ๋ชจ๋“  ํŒŒ์ผ)์„ ๋งŒ๋“  ๋‹ค์Œ dev ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋ช‡ ๊ฐ€์ง€ ์‹คํ—˜ ํ›„ ์ž‘๋™ํ•˜๋Š” ๋ชจ๋“  ์กฐํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • main.js , tsconfig.json , .ts ๋‚ด๋ถ€์˜ ๋‹จ์ผ /src
  • main.ts , ์•„๋‹ˆ์š” tsconfig.json , ์•ฑ ๊ฐ€์ ธ์˜ค๊ธฐ์— ts-ignore ์ถ”๊ฐ€:

    • ts // @ts-ignore import App from './App.svelte'

  • main.ts , tsconfig.json ๋ฐ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋กœ ์„ค์ •:
{
  "compilerOptions": {
    "target": "ES2015 (or greater)",
    "module": "ES2015, ES2020, or ESNEXT"
  }
}

@GavinRay97 ์กฐ์‚ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ํ…œํ”Œ๋ฆฟ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰