Signature_pad: TypeScriptμ—μ„œ κ°€μ Έμ˜¬ 수 μ—†μŒ

에 λ§Œλ“  2018λ…„ 02μ›” 05일  Β·  20μ½”λ©˜νŠΈ  Β·  좜처: szimek/signature_pad

μ„€λͺ…에 λ”°λ₯΄λ©΄ λ‹€μŒκ³Ό 같이 이 λͺ¨λ“ˆμ„ TypeScript둜 κ°€μ Έμ˜¬ 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
import * as SignaturePad from 'signature_pad';

내보낸 λͺ¨λ“ˆμ΄ μ—†κΈ° λ•Œλ¬Έμ— TypeScriptλŠ” 이것을 μœ νš¨ν•œ κ²ƒμœΌλ‘œ μΈμ‹ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. TypeScript ν˜Έν™˜μ„±μ„ μœ„ν•΄ λͺ¨λ“ˆμ„ λ‚΄λ³΄λ‚΄μ‹­μ‹œμ˜€.

λ‹€μŒμ€ 이에 κ΄€ν•œ μŠ€νƒ μ˜€λ²„ν”Œλ‘œ 주제 μž…λ‹ˆλ‹€.

more info

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

방금 TypeScript둜 λ‹€μ‹œ μž‘μ„±λœ 베타 버전을 μΆœμ‹œν–ˆμŠ΅λ‹ˆλ‹€. μ„ μ–Έ νŒŒμΌμ€ 이제 λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€. yarn add signature_pad@beta μ‚¬μš©ν•˜μ—¬ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ†ŒμŠ€ μ½”λ“œλŠ” μ—¬μ „νžˆ typescript λΆ„κΈ° μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬μ „νžˆ κΈ°λ³Έ 내보내기λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ Webpack 4 및 TypeScript 2.7.2둜 ν…ŒμŠ€νŠΈν–ˆμœΌλ©° import SignaturePad from 'signature_pad' μ‚¬μš©ν•˜μ—¬ κ°€μ Έμ˜€λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

μž‘λ™ν•˜λŠ”μ§€, λ¬Έμ œκ°€ μžˆλŠ”μ§€ λ“±μ˜ ν”Όλ“œλ°±μ„ λ°›λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  20 λŒ“κΈ€

μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©΄ signature_pad/dist/signature_pad.mjs μ—μ„œ 직접 κ°€μ Έμ˜€κΈ°λ₯Ό μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒ 버전은 TypeScript둜 λ‹€μ‹œ μž‘μ„±λ  κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€. typescript λΆ„κΈ°λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. λ‚˜λŠ” "κ·Έλƒ₯" 그것을 μ •λ¦¬ν•˜κ³  λͺ¨λ“  버전(umd es5, es6, non-minified, minified λ“±)에 λŒ€ν•œ λ‘€μ—… ꡬ성과 TS μ„ μ–Έ νŒŒμΌμ„ μƒμ„±ν•˜λŠ” 방법을 μ•Œμ•„λ‚Ό 자유 μ‹œκ°„μ„ μ°Ύμ•„μ•Ό ν•©λ‹ˆλ‹€.

@szimek 이것은 .tsx 파일 λ‚΄μ—μ„œ μ—¬μ „νžˆ μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

import * as SignaturePad from 'signature_pad'; SignaturePadκ°€ μƒμ„±μžκ°€ μ•„λ‹˜μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

import * as SignaturePad from 'signature_pad/dist/signature_pad.mjs'; SignaturePadκ°€ μƒμ„±μžκ°€ μ•„λ‹˜μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

const SignaturePad = require('signature_pad'); SignaturePadκ°€ μƒμ„±μžκ°€ μ•„λ‹˜μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

import SignaturePad from 'signature_pad'; μž‘λ™ν•˜μ§€λ§Œ μ½˜μ†”μ— typescript 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€ . ...node_modules/@types/signature_pad/index.d.ts' is not a module.

이 경우 SignaturePad λ³€μˆ˜μ— μ •ν™•νžˆ 무엇이 μžˆμŠ΅λ‹ˆκΉŒ? signature_pad/dist/signature_pad.mjs μ½”λ“œλŠ” κΈ°λ³Έ 내보내기와 ν•¨κ»˜ ES6 μ†ŒμŠ€ μ½”λ“œμ™€ ν•¨κ»˜ λ²ˆλ“€λ‘œ μ œκ³΅λ©λ‹ˆλ‹€. TSκ°€ κΈ°λ³Έ 내보내기λ₯Ό μ²˜λ¦¬ν•˜μ§€ μ•ŠλŠ” ν•œ μ œλŒ€λ‘œ μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€.

@szimek TSλŠ” κΈ°λ³Έ 내보내기λ₯Ό 잘 μ²˜λ¦¬ν•©λ‹ˆλ‹€. λ¬Έμ œλŠ” @types/signature_pad index.d.ts μ •μ˜μ— μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ 이 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” TypeScript μ„ μ–Έ νŒŒμΌμ„ μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@szimek 그렇지 μ•ŠμŠ΅λ‹ˆκΉŒ? 그러면 install @types/signature_pad --save-dev ν•˜λ©΄ μ„€μΉ˜λ˜λŠ” 것은 ν™•μ‹€νžˆ TS μ„ μ–Έ 파일이 μžˆμŠ΅λ‹ˆλ‹€. 같은 μ‚¬λžŒλ“€μ΄ λ§Œλ“ κ±° μ•„λ‹˜??

λͺ°λΌ ;) κ²Œμ‹œ 쀑인 λͺ¨λ“  νŒŒμΌμ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€ . 예:

@szimek λ‚˜λŠ” @ 문자 λ•Œλ¬Έμ— 전체 μ„€μΉ˜ 라인을 ν‘œμ‹œν•˜μ§€ μ•ŠκΈ° 전에 λ‚΄ 주석을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€. 기본적으둜 install @types/signature_pad --save-dev ν•˜λ©΄ @types/signature_pad 폴더에 μ„€μΉ˜λœ μ •μ˜λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λˆ„κ°€ 그런 짓을 ν•˜λŠ”μ§€ κΆκΈˆν•˜λ‹€. μ–΄μ©Œλ©΄ μš°λ¦¬λŠ” κ·Έλ“€μ—κ²Œ μ—°λ½ν•˜μ—¬ μˆ˜μ •ν•˜κ³  κΈ°λ³Έ νŒ¨ν‚€μ§€μ— 병합해야 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

ν™•μ‹€νžˆ Typed 의 μ •μ˜ νŒŒμΌμ„ μ‚¬μš©ν•˜κ³  μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

선언을 μ˜¬λ°”λ₯΄κ²Œ 읽으면 μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€(μ‹œλ„ν•˜μ§€ μ•Šμ•„ μ£„μ†‘ν•©λ‹ˆλ‹€. 방금 이 문제λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€).
import { SignaturePad } from 'signature_pad';

@strongui 저도 λ‹Ήμ‹ κ³Ό 같은 μ‹€μˆ˜λ₯Ό ν–ˆμŠ΅λ‹ˆλ‹€. λŒ“κΈ€μ— μžˆλŠ”κ±° λ‹€ ν•΄λ΄€λŠ”λ°
λ‚˜λŠ” λ˜ν•œ λ‹Ήμ‹ μ˜ 의견 @szimek을 μ‹œλ„
μ§€κΈˆμ€ JS νŒŒμΌμ— μ„œλͺ… νŒ¨λ“œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ§€λ§Œ TS둜 μž₯μ†Œλ₯Ό λ³€κ²½ν•΄μ•Όν•©λ‹ˆλ‹€
λ…Έλ“œ 버전 v6.11.2λ₯Ό μ‚¬μš©ν•˜κ³  Typescript 버전은 v2.6.2μž…λ‹ˆλ‹€.
npm version { npm: '3.10.10', ares: '1.10.1-DEV', node: '6.11.2', zlib: '1.2.11' }

방금 TypeScript 2.7.2λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹œλ„ν–ˆλŠ”λ° 잘 μž‘λ™ν•©λ‹ˆλ‹€.

index.ts

import SignaturePad from 'signature_pad';

new SignaturePad(document.querySelector('canvas'));

index.html

<html>
  <body>  
    <canvas style="border: 2px solid #000"></canvas>
    <script src="bundle.js"></script>
  </body>
</html>

tsconfig.json

{
  "compilerOptions": {
    "outDir": ".",
    "noImplicitAny": true,
    "module": "es6",
    "target": "es3"
  }
}

webpack.config.js

module.exports = {
  entry: './index.js',  
  output: { filename: 'bundle.js' },
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: 'ts-loader',
        exclude: /node_modules/
      }
    ]
  },
  resolve: {
    extensions: [ '.ts', '.js' ]
  }
};

yarn add signature_pad typescript webpack ts-loader && yarn run webpack ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ index.html μ—΄λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

@szimek κ°μ‚¬ν•©λ‹ˆλ‹€ 그것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•©λ‹ˆλ‹€

TypeScript 2.4.2λ₯Ό μ‚¬μš©ν•˜κ³  μœ„μ˜ μ£Όμ„μ—μ„œ @szimek κ³Ό 같이 κ°€μ Έμ˜€κΈ°λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘λ™ν•©λ‹ˆλ‹€.

tsconfig.json

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [
      "dom",
      "es2015"
    ],
    "module": "es2015",
    "moduleResolution": "node",
    "sourceMap": true,
    "target": "es5"
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ],
  "compileOnSave": false,
  "atom": {
    "rewriteTsconfig": false
  }
}

그듀을 μœ„ν•΄ SignaturePadλŠ” requirejs 및 webpack(λ˜λŠ” laravel mix)의 ν›„λ“œ μ•„λž˜μ—μ„œ κ°€ μ•„λ‹™λ‹ˆλ‹€. λ‹€μŒκ³Ό 같이 default 와 ν•¨κ»˜ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.
new SignaturePad.default(canvas, { backgroundColor: 'rgb(255, 255, 255)' });

방금 TypeScript둜 λ‹€μ‹œ μž‘μ„±λœ 베타 버전을 μΆœμ‹œν–ˆμŠ΅λ‹ˆλ‹€. μ„ μ–Έ νŒŒμΌμ€ 이제 λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€. yarn add signature_pad@beta μ‚¬μš©ν•˜μ—¬ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ†ŒμŠ€ μ½”λ“œλŠ” μ—¬μ „νžˆ typescript λΆ„κΈ° μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬μ „νžˆ κΈ°λ³Έ 내보내기λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ Webpack 4 및 TypeScript 2.7.2둜 ν…ŒμŠ€νŠΈν–ˆμœΌλ©° import SignaturePad from 'signature_pad' μ‚¬μš©ν•˜μ—¬ κ°€μ Έμ˜€λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

μž‘λ™ν•˜λŠ”μ§€, λ¬Έμ œκ°€ μžˆλŠ”μ§€ λ“±μ˜ ν”Όλ“œλ°±μ„ λ°›λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

TypeScript 2.8 μ•±μ—μ„œ 베타 버전을 μ‚¬μš©ν•˜κ³  있으며 잘 μž‘λ™ν•©λ‹ˆλ‹€.

μ‚¬μ†Œν•œ 문제:

  • const touch = event.targetTouches[0] 이 μ •μ˜λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— ν„°μΉ˜ μ’…λ£Œ μ‹œ μ²˜λ¦¬λ˜μ§€ μ•Šμ€ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
  • μΊ”λ²„μŠ€μ˜ toDataURL λ©”μ„œλ“œμ™€ μΌμΉ˜μ‹œν‚€λ €λ©΄ toDataURL λ©”μ„œλ“œμ— μ˜΅μ…˜μœΌλ‘œ ν‘œμ‹œλœ μΈμˆ˜κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

@StevenBarnettST μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€! μ΄λŸ¬ν•œ 문제λ₯Ό μ‹ κ³ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 내일 λ‚˜λŠ” μƒˆλ‘œμš΄ 베타 버전을 μΆœμ‹œν•  κ²ƒμž…λ‹ˆλ‹€.

μžλ™ μ™„μ„± 및 ts 검사λ₯Ό μœ„ν•΄ μ„œλͺ… νŒ¨λ“œμ˜ TYPE/μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ³€μˆ˜μ— λ°”μΈλ”©ν•˜λŠ” μ˜¬λ°”λ₯Έ 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

그듀을 μœ„ν•΄ SignaturePadλŠ” requirejs 및 webpack(λ˜λŠ” laravel mix)의 ν›„λ“œ μ•„λž˜μ—μ„œ κ°€ μ•„λ‹™λ‹ˆλ‹€. λ‹€μŒκ³Ό 같이 default 와 ν•¨κ»˜ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.
new SignaturePad.default(canvas, { backgroundColor: 'rgb(255, 255, 255)' });

이것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•©λ‹ˆλ‹€. 정말 κ°μ‚¬ν•©λ‹ˆλ‹€! (μ‹¬ν¬λ‹ˆ μ›ΉνŒ© μ•™μ½”λ₯΄)

μž‘λ™ν•˜λ„λ‘ ν•΄κ²° 방법을 μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.
var SignaturePad = require('signature_pad/dist/signature_pad.js');

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

c2ofh picture c2ofh  Β·  7μ½”λ©˜νŠΈ

crazzeto picture crazzeto  Β·  8μ½”λ©˜νŠΈ

MarcGodard picture MarcGodard  Β·  8μ½”λ©˜νŠΈ

khawye picture khawye  Β·  4μ½”λ©˜νŠΈ

lowe493 picture lowe493  Β·  5μ½”λ©˜νŠΈ