Vue: `whitespace : 'condense'`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์š”์†Œ ๋งŒ ํฌํ•จ๋˜๊ณ  ๊ณต๋ฐฑ์€ ๋นˆ ํƒœ๊ทธ๋กœ ์••์ถ•๋ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 09์›” 06์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vuejs/vue

๋ฒ„์ „

4.0.0-rc.1

๋ณต์ œ ๋งํฌ

https://github.com/tobyzerner/vue-cli-nbsp-bug

ํ™˜๊ฒฝ ์ •๋ณด

Environment Info:
  System:
    OS: macOS 10.14.6
    CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
  Binaries:
    Node: 10.15.3 - /usr/local/bin/node
    Yarn: 1.17.3 - ~/.npm-global/bin/yarn
    npm: 6.11.3 - ~/.npm-global/bin/npm
  Browsers:
    Chrome: 76.0.3809.132
    Firefox: 68.0.2
    Safari: 12.1.2
  npmPackages:
    @vue/babel-helper-vue-jsx-merge-props:  1.0.0
    @vue/babel-plugin-transform-vue-jsx:  1.0.0
    @vue/babel-preset-app:  4.0.0-rc.1
    @vue/babel-preset-jsx:  1.1.0
    @vue/babel-sugar-functional-vue:  1.0.0
    @vue/babel-sugar-inject-h:  1.0.0
    @vue/babel-sugar-v-model:  1.0.0
    @vue/babel-sugar-v-on:  1.1.0
    @vue/cli-overlay:  4.0.0-rc.1
    @vue/cli-plugin-babel: ^4.0.0-rc.1 => 4.0.0-rc.1
    @vue/cli-plugin-eslint: ^4.0.0-rc.1 => 4.0.0-rc.1
    @vue/cli-service: ^4.0.0-rc.1 => 4.0.0-rc.1
    @vue/cli-shared-utils:  4.0.0-rc.1
    @vue/component-compiler-utils:  3.0.0
    @vue/preload-webpack-plugin:  1.1.1
    @vue/web-component-wrapper:  1.2.0
    eslint-plugin-vue: ^5.0.0 => 5.2.3
    vue: ^2.6.10 => 2.6.10
    vue-eslint-parser:  5.0.0
    vue-hot-reload-api:  2.3.3
    vue-loader:  15.7.1
    vue-style-loader:  4.1.2
    vue-template-compiler: ^2.6.10 => 2.6.10
    vue-template-es2015-compiler:  1.9.1
  npmGlobalPackages:
    @vue/cli: 4.0.0-rc.1

์žฌํ˜„ ๋‹จ๊ณ„

์ €์žฅ์†Œ, npm install && npm run serve ๋ณต์ œ

๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๊นŒ?

ํ…œํ”Œ๋ฆฟ์—๋Š”   ๋ฌธ์ž๊ฐ€ ํฌํ•จ ๋œ ๋ฒ”์œ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„๋Š” ๋นจ๊ฐ„์ƒ‰ ๋ฐฐ๊ฒฝ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŽ˜์ด์ง€์— ์ž‘์€ ๋นจ๊ฐ„์ƒ‰ ์ƒ์ž๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

ํ…œํ”Œ๋ฆฟ์˜   ์ด ๋ฌด์‹œ๋˜๊ณ  ์ผ๋ฐ˜ ๊ณต๋ฐฑ์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” span ์š”์†Œ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


์ด ๋ฒ„๊ทธ๋Š” ์ผ๋ฐ˜ Vue jsfiddle์ด๋‚˜ vue-cli์—†์ด vue-loader๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๋ณต์ œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜๋Š” vue-cli์˜ ๋ฌด์–ธ๊ฐ€๊ฐ€ vue-template-compiler ๋˜๋Š” Vue ์ž์ฒด๊ฐ€ ์•„๋‹Œ ๋ฒ”์ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

bug compiler has PR

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

์ด ๋ฌธ์ œ๋Š” https://github.com/vuejs/vue/commit/e1abedb9e66b21da8a7e93e175b9dabe334dfebd์— ์†Œ๊ฐœ ๋œ ๋ฒ„๊ทธ๋ผ๊ณ  ๋ฏฟ๊ธฐ ๋•Œ๋ฌธ์— vue ์ €์žฅ์†Œ๋กœ ์ „์†กํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/vuejs/vue/issues/9208#issuecomment -477811927์—์„œ ๋‹ค๋ฅธ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ

ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• :

// vue.config.js
module.exports = {
  chainWebpack: config => {
    config.module
      .rule('vue')
        .use('vue-loader')
          .tap(args => {
            args.compilerOptions.whitespace = 'preserve'
          })
  }
}

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

์ด ๋ฌธ์ œ๋Š” https://github.com/vuejs/vue/commit/e1abedb9e66b21da8a7e93e175b9dabe334dfebd์— ์†Œ๊ฐœ ๋œ ๋ฒ„๊ทธ๋ผ๊ณ  ๋ฏฟ๊ธฐ ๋•Œ๋ฌธ์— vue ์ €์žฅ์†Œ๋กœ ์ „์†กํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/vuejs/vue/issues/9208#issuecomment -477811927์—์„œ ๋‹ค๋ฅธ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ

ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• :

// vue.config.js
module.exports = {
  chainWebpack: config => {
    config.module
      .rule('vue')
        .use('vue-loader')
          .tap(args => {
            args.compilerOptions.whitespace = 'preserve'
          })
  }
}

ํ—ค์–ด ์ŠคํŽ˜์ด์Šค (   )๋„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ ..?

_edit : ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ ๋งํฌ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค _

์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด @naton ์€ vue repo์—์„œ ๋…ผ์˜๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. Sodatea๋Š” ๋ฌธ์ œ๋ฅผ ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค

@LinusBorg ๊ฐ€ Vue ๋ ˆํฌ๊ฐ€ ์•„๋‹™๋‹ˆ๊นŒ? ๋งํฌ ๋œ ์ด์Šˆ๋Š” ์›๋ž˜์˜ '์ฝ˜ ๋ด์Šค'๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ณ€๊ฒฝ์ด ์•„๋‹Œ๊ฐ€์š”? ๋˜ํ•œ ํ์‡„๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์˜ค๋Š˜ ์ด๊ฒƒ์„ ๋งŒ๋‚ฌ๊ณ  ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” '์ถ•์•ฝ'์„ค์ •์„ ๊ฐ€์ •ํ•˜๋Š” ์ผ๋ถ€ ํ˜„์ง€ํ™” ์ž๋™ํ™”๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค (Evan์˜ ์ œ์•ˆ์— ๋”ฐ๋ผ 3.x์—์„œ ๊ธฐ๋ณธ๊ฐ’์ด ๋  ๊ฒƒ์ด๋ฉฐ ์ œ๊ฐ€ ์ถ•์•ฝ ๋™์ž‘์— ๋™์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ๋”ฐ๋ผ์„œ ์ž ์žฌ์  ์ธ ๋ถ€์ž‘์šฉ์—†์ด ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ๊ต์ฒดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ข‹์•„ ๋‹จ์ˆœํžˆ nbsp; ์š”์†Œ ๋‚ด๋ถ€ ์ž์ฒด๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„์œ„ํ•œ ๋ฉ”๋ชจ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

e1abedb์— ๋„์ž… ๋œ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—์ด ๋ฌธ์ œ๋ฅผ vue ์ €์žฅ์†Œ๋กœ ์ „์†กํ–ˆ์Šต๋‹ˆ๋‹ค.

# 9208 (๋Œ“๊ธ€) ์—์„œ ๋‹ค๋ฅธ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• :

// vue.config.js
module.exports = {
  chainWebpack: config => {
    config.module
      .rule('vue')
        .use('vue-loader')
          .tap(args => {
            args.compilerOptions.whitespace = 'preserve'
          })
  }
}

์ด๊ฒƒ์€ Vue 3์—์„œ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. "TypeError : Cannot set property 'whitespace'of undefined"์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Vue 3์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

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