Ant-design: antd ํ…Œ๋งˆ ๊ฐ€์ ธ์˜ค๊ธฐ, webpack ๋นŒ๋“œ ํ‘œ์‹œ .bezierEasingMixin ์˜ค๋ฅ˜?

์— ๋งŒ๋“  2017๋…„ 10์›” 18์ผ  ยท  39์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ant-design/ant-design

๋ฒ„์ „

2.13.6

ํ™˜๊ฒฝ

npm 7, "antd": "^2.13.6",

์žฌ์ƒ์‚ฐ ๋งํฌ

http://github.com

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

1. ๋ฐ˜์‘ ์•ฑ ๊บผ๋‚ด๊ธฐ ๋งŒ๋“ค๊ธฐ,

  1. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋œ ๋กœ๋”๋ฅผ ์„ค์ •ํ•˜๊ณ ,
    3. @import "~antd/dist/antd.less";
  2. ๋นŒ๋“œ ํ›„ ์˜ค๋ฅ˜ ํ‘œ์‹œ
    https://ant.design/docs/react/customize-theme-cn#1)-package.theme%EF%BC%88%E6%8E%A8%E8%8D%90%EF%BC%89

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

๋นŒ๋“œ ์„ฑ๊ณต!

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

๋ชจ๋“ˆ ๋นŒ๋“œ ์‹คํŒจ:

// https://github.com/ant-design/ant-motion/issues/44
.bezierEasingMixin();
^^
์ธ๋ผ์ธ JavaScript๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์˜ต์…˜์— ์„ค์ •๋˜์–ด ์žˆ๋‚˜์š”?
/Users/MacBook/Documents/2017/react-admin-template/node_modules/antd/lib/style/color/bezierEasing.less(108ํ–‰, 0์—ด)


็œ‹่ตทๆฅๆ˜ฏ ้‚ฃ่กŒless็š„ๅ†™ๆณ• ไธ่ฎค๏ผŒๅฐฑๆŠฅ้”™ไบ†ใ€‚
image

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

๋ฒ„์ „: [email protected]

[email protected] ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

[email protected] , ๊ตฌ์„ฑ ํ•ญ๋ชฉ javascriptEnabled: true๋ฅผ

{ loader: 'less-loader', options: { javascriptEnabled: true } }

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

image

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

image

์ด ๋œ ์ƒˆ ๋ฒ„์ „ ๋ฒ„๊ทธ!!!!! ๋‹ซ๋‹ค!

 Inline JavaScript is not enabled. Is it set in your options?

์ธ๋ผ์ธ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ์˜ต์…˜์„ ์ผœ๋ณด์‹ญ์‹œ์˜ค.

์ด ์˜ต์…˜์„ ์–ด๋””์—์„œ ์„ค์ •ํ•ฉ๋‹ˆ๊นŒ?

๋ฒ„์ „: [email protected]

[email protected] ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

[email protected] , ๊ตฌ์„ฑ ํ•ญ๋ชฉ javascriptEnabled: true๋ฅผ

{ loader: 'less-loader', options: { javascriptEnabled: true } }

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

image

@Lovesueee ํŠธ๋ž™ https://github.com/less/less.js/issues/3113

ํ•ดํ‚น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋” ์ ๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด antd๊นŒ์ง€์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. @yesmeck ์ˆ˜์ •์€ ์–ธ์ œ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

https://github.com/ant-design/ant-design/commit/9634bea391dd2b7b17f1e89383577e248081a044 ์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ์ˆ˜์ •์œผ๋กœ ์ƒˆ ๋ฒ„์ „์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”!

@bkniffler ์ด๋ฒˆ ์ฃผ๋ง.

@bkniffler ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ 2.7 ๋ฏธ๋งŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@yesmeck์€ ์ด์œ ๋ฅผ ๋ชจ๋ฅด์ง€๋งŒ 3.3.0 ๋ฆด๋ฆฌ์Šค์—์„œ๋„ ์—ฌ์ „ํžˆ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 2.7๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
screenshot 2018-03-12 23 22 47

@madisvain { loader: 'less-loader', options: { javascriptEnabled: true } } less@3๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

๊ฐœ๋ฏธ@3.x
๋œ@2.x
[email protected]
.babelrc

"style": true,

์ผํ•˜๋‹ค!

๊ตฌ์„ฑ ๋ฐ ์Šคํƒ€์ผ์ด ๋ณด๊ณ ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐœ๋ฏธ 3.6.3
2.7.2 ๋ฏธ๋งŒ
๋กœ๋”๊ฐ€ ์ ์€ 4.1.0
image

@webMasterMrBin ๋œ ๋กœ๋”๋ฅผ ํ†ตํ•ด CSS ํŒŒ์ผ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค

@afc163 ์›นํŒฉ ์˜ ๊ธฐ๋ณธ์„ ๋ณด์™„ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

create-react-app์„ ๊บผ๋‚ด์ง€ ์•Š๊ณ  react-app-rewire-less ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํŒจํ‚ค์ง€๋ฅผ 2.1.1์—์„œ 2.1.2๋กœ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์†”๋ฃจ์…˜์€ package.json ์—์„œ ๋ฒ„์ „์„ "2.1.1"๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@FeynmanDNA ๋˜๋Š” ์ด ์˜ต์…˜์„ config-overrides.js์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

config = rewireLess.withLoaderOptions({
  javascriptEnabled: true 
})(config, env);

@ํ”„๋กœ์Šคํ†ค ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

๋‚ด๊ฐ€ ์–ป๋Š” ์ฝ˜์†”์— @froston ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Failed to compile
./src/resources/_antd.less
Module build failed: 


.antCheckboxFn();
^
Cannot read property 'eval' of null
      in /Users/ulisescarreon/Sites/doux_repositories/cleanui-admin-template-react/node_modules/antd/lib/checkbox/style/index.less (line 4, column 0)

์–ด๋–ค ์ถฉ๊ณ ?

@froston : ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ’ฏ

์ธ๋ผ์ธ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@ulisescarreonalvarez ํ•ด๊ฒฐํ•˜์…จ๋‚˜์š” ?

@hecomp

์•ˆ๋…•ํ•˜์„ธ์š” package.json์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

"react-app-rewire-less": "^2.1.1",

์ด์—:

"react-app-rewire-less": "2.1.1",

์•ˆ๋…•ํ•˜์„ธ์š” @ulisescarreonalvarez ๊ท€ํ•˜์˜ ๊ฐœ๋ฏธ ๋ฒ„์ „์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ง€๊ธˆ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
./src/resources/_antd.less Module build failed: Error: Cannot find module 'less'

๋‚ด ๊ฒƒ์€ 3.5.3

@ulisescarreonalvarez config-override.js๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@hecomp config-overrides.js:

const rewired = require('react-app-rewired')
const rewireLess = require('react-app-rewire-less')
const rewireEslint = require('react-app-rewire-eslint')

function rewire(config, env) {
  const cssLoader = rewired.getLoader(
    config.module.rules,
    rule => rule.test && String(rule.test) === String(/\.css$/)
  )
  const sassLoader = {
    test: /\.scss$/,
    use: [...(cssLoader.loader || cssLoader.use), 'sass-loader']
  }
  const oneOf = config.module.rules.find(rule => rule.oneOf).oneOf
  oneOf.unshift(sassLoader)

  config = rewired.injectBabelPlugin('transform-decorators-legacy', config)
  config = rewireLess(config, env)
  config = rewireEslint(config, env)
  config = rewireLess.withLoaderOptions({
    javascriptEnabled: true 
  })(config, env);

  return config
}

module.exports = rewire

jsconfig.json:

{
  "compilerOptions": {
    "target": "ES6",
    "experimentalDecorators": true
  },
  "exclude": ["node_modules"]
}

ํŒจํ‚ค์ง€.json:

{
  "name": "Project",
  "version": "0.1.0",
  "private": true,
  "homepage": ".",
  "devDependencies": {
    "babel-plugin-transform-decorators-legacy": "^1.3.4",
    "husky": "^0.14.3",
    "lint-staged": "^4.0.2",
    "node-sass": "^4.9.0",
    "prettier": "^1.5.3",
    "querystring": "^0.2.0",
    "react-app-rewire-eslint": "^0.2.3",
    "react-app-rewire-less": "2.1.1",
    "react-app-rewired": "^1.5.2",
    "react-dnd": "^2.6.0",
    "react-dnd-html5-backend": "^2.6.0",
    "react-scripts": "^1.1.4",
    "redux-devtools-extension": "^2.13.0",
    "redux-logger": "^3.0.1",
    "sass-loader": "^7.0.1"
  },
  "dependencies": {
    "@rowno/sparkline": "^3.0.1",
    "ajv": "^6.5.0",
    "antd": "^3.5.3",
    "axios": "^0.18.0",
    "bootstrap": "^4.1.1",
    "chart.js": "^2.7.2",
    "chartist": "^0.10.1",
    "chartist-plugin-tooltip": "^0.0.11",
    "classnames": "^2.2.5",
    "d3-dsv": "^1.0.8",
    "d3-format": "^1.2.1",
    "d3-scale": "^1.0.7",
    "d3-time-format": "^2.1.1",
    "draft-js": "^0.10.5",
    "enquire-js": "^0.2.1",
    "fetch-jsonp": "^1.1.3",
    "immutability-helper": "^2.7.0",
    "immutable": "^3.8.2",
    "jquery": "^3.3.1",
    "lodash": "^4.17.10",
    "moment": "^2.19.3",
    "moment-timezone": "^0.5.14",
    "peity-react": "^0.0.7",
    "popper.js": "^1.14.3",
    "prop-types": "^15.5.10",
    "rc-drawer-menu": "^0.5.7",
    "react": "^16.4.0",
    "react-avatar-editor": "^10.2.1",
    "react-c3js": "^0.1.20",
    "react-chartist": "^0.13.1",
    "react-chartjs-2": "^2.7.0",
    "react-container-query": "^0.11.0",
    "react-custom-scrollbars": "^4.2.1",
    "react-dom": "^16.4.0",
    "react-draft-wysiwyg": "^1.12.13",
    "react-helmet": "^5.2.0",
    "react-infinite-scroller": "^1.1.4",
    "react-loadable": "^5.4.0",
    "react-redux": "^5.0.7",
    "react-redux-spinner": "^1.1.3",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2",
    "react-router-redux": "^5.0.0-alpha.6",
    "react-stockcharts": "^0.7.0-beta.22",
    "react-syntax-highlighter": "^7.0.4",
    "react-transition-group": "^2.3.1",
    "react-virtualized": "^9.18.5",
    "redux": "^3.7.2",
    "redux-act": "^1.3.0",
    "redux-thunk": "^2.2.0",
    "reqwest": "^2.0.5",
    "webpack": "^3.12.0"
  },
  "scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "eject": "react-scripts eject",
    "precommit": "lint-staged"
  },
  "lint-staged": {
    "src/**/*.js": [
      "prettier --tab-width 2 --print-width 100 --single-quote --trailing-comma all --no-semi --parser babylon --write"
    ]
  }
}

@Remimstr

์ธ๋ผ์ธ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ํ—˜์€ Less ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ…Œ๋งˆ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜์— ๋Œ€ํ•ด "์˜จ๋ผ์ธ ๊ตฌ์„ฑ"์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ž…๋ ฅ์„ ์‚ญ์ œํ•˜์ง€ ์•Š์œผ๋ฉด ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

@theme-color: `code_to_delete_my_whole_computer_oops()`

๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด javascriptEnabled ์˜ต์…˜์„ ์žฌ์ •์˜ํ•˜๋„๋ก ํ•จ์œผ๋กœ์จ ๋ณธ์งˆ์ ์œผ๋กœ ์ด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์ž ์žฌ์ ์ธ ๋ณด์•ˆ ํ—ˆ์ ์„ ์—ฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ๊ทธ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ์™„์„ฑ ์ž…๋ ฅ์„ Less์— ๋„ฃ์—ˆ์„ ๋•Œ๋งŒ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์ด ์˜ต์…˜์ด ์—†์œผ๋ฉด ์‚ด๊ท ๋˜์ง€ ์•Š์€ ์ž…๋ ฅ์€ ๋‹จ์ˆœํžˆ ๊ตฌ๋ฌธ ๋ถ„์„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ javascriptEnabled: true ์˜ต์…˜์„ ๊ฐ•์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋””์ž์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  @plugin ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@matthew-dean ๋‹น์‹ ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@afc163 ๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค. ์ฒซ์งธ, ์ด ๊ฑฐ๋Œ€ํ•œ ๊ธฐ๋Šฅ์€ ์‹ค์ œ๋กœ ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ถœ๋ ฅ์ด ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ์ค„์€ this.colorEasing ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์™œ? this ์˜ ๊ฐ€์น˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ „์—ญ์„ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋กœ ์œ ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ? https://github.com/ant-design/ant-design/blob/cfdf06213b952451600ae659e69fa302a7baf271/components/style/color/bezierEasing.less#L102

์–ผ๋งˆ ์ „์— ์ œ์ถœํ•œ ๋ฌธ์ œ์— ๋”ฐ๋ฅด๋ฉด ์˜ˆ, ์˜๋„์ ์œผ๋กœ ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์ „์—ญ์„ ์œ ์ถœํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. https://github.com/ant-design/ant-design/issues/11097

@matw-dean ์ œ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@afc163 ์—ฌ๊ธฐ์—์„œ ํ™๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/ant-design/ant-design/pull/13242

๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด๋ด, ๋‚˜๋Š” antd๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค.

./src/index.less
๋ชจ๋“ˆ ๋นŒ๋“œ ์‹คํŒจ:

// https://github.com/ant-design/ant-motion/issues/44
.tinyColorMixin();
^^

๊ทธ๋ฆฌ๊ณ  ๋‚ด config-overrides.js
const { injectionBabelPlugin } = require('react-app-rewired');
const rewireLess = require('react-app-rewire-less');

module.exports = ํ•จ์ˆ˜ ์žฌ์ •์˜(๊ตฌ์„ฑ, ํ™˜๊ฒฝ) {
๊ตฌ์„ฑ = ์ฃผ์ž…๋ฐ”๋ฒจํ”Œ๋Ÿฌ๊ทธ์ธ(
['import', { libraryName: 'antd', libraryDirectory: 'es', style: true }], // ๊ฐ€์ ธ์˜ค๊ธฐ CSS๋ฅผ less๋กœ ๋ณ€๊ฒฝ
๊ตฌ์„ฑ
);
๊ตฌ์„ฑ = rewireless.withLoaderOptions({
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ: ์ฐธ
})(๊ตฌ์„ฑ, ํ™˜๊ฒฝ);
๋ฐ˜ํ™˜ ๊ตฌ์„ฑ;
};

๋‚ด package.json ์ด์™€ ๊ฐ™์€

"react-app-rewire-less": "^2.1.3",
"react-app-rewired": "^1.6.2",

์•ˆ๋…•ํ•˜์„ธ์š” - jsx์—์„œ jsx + ts๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ JHipster๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ๊ฐœ๋ฐœ๋œ ๊ฒƒ๊ณผ ๊ด€๋ฆฌ ํ…œํ”Œ๋ฆฟ์„ ๋ณ‘ํ•ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด ์Šค๋ ˆ๋“œ์—์„œ ๊ฒช์—ˆ๋˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค...

./src/resources/_antd.less(./node_modules/css-loader??ref--9-1!./node_modules/less-loader/dist/cjs.js??ref--9-2! ./src/resources/_antd.less)
๋ชจ๋“ˆ ๋นŒ๋“œ ์‹คํŒจ(./node_modules/less-loader/dist/cjs.js์—์„œ):
.antCheckboxFn();
^^
null์˜ 'eval' ์†์„ฑ์„ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
Documentswscleanui-typescriptnode_modulesantdlibcheckboxstyleindex.less(4ํ–‰, 0์—ด)

๋‚ด webpack ๊ตฌ์„ฑ์—์„œ ๋œ ๋กœ๋” ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด 'Inline Javascript' ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ํ™œ์„ฑํ™”ํ•˜๋ฉด ์œ„์˜ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์•„์ด๋””์–ด?

webpack.dev.js
๋ชจ๋“ˆ: {
๊ทœ์น™: [
{
ํ…Œ์ŠคํŠธ: /.less$/,
์‚ฌ์šฉํ•˜๋‹ค: [
{loader: 'style-loader' // JS ๋ฌธ์ž์—ด์—์„œ ์Šคํƒ€์ผ ๋…ธ๋“œ ์ƒ์„ฑ
}, {
loader: 'css-loader', // CSS๋ฅผ CommonJS๋กœ ๋ณ€ํ™˜
์˜ต์…˜:{ importLoaders: 1}
},
{
๋กœ๋”: '๋œ ๋กœ๋”',
์˜ต์…˜: {
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ: ์ฐธ
}
}]
},
{
ํ…Œ์ŠคํŠธ: /.(sa|sc|c)ss$/,
์‚ฌ์šฉ: ['์Šคํƒ€์ผ ๋กœ๋”', 'css-๋กœ๋”', 'ํฌ์ŠคํŠธcss-๋กœ๋”', {
๋กœ๋”: 'sass-loader',
์˜ต์…˜: { ๊ตฌํ˜„: sass }
}
]
},
]
}
`

ํŒจํ‚ค์ง€.json

[{
  "name": "tensor-base-template",
  "version": "0.1.0",
  "private": true,
  "homepage": ".",
  "devDependencies": {
    "@types/chai": "4.1.4",
    "@types/enzyme": "3.1.13",
    "@types/jest": "23.3.1",
    "@types/lodash": "4.14.116",
    "@types/mocha": "5.2.5",
    "@types/node": "10.9.2",
    "@types/react": "16.4.12",
    "@types/react-dom": "16.0.7",
    "@types/react-redux": "6.0.6",
    "@types/react-router-dom": "4.3.0",
    "@types/redux": "3.6.31",
    "@types/selenium-webdriver": "3.0.10",
    "@types/webpack-env": "1.13.6",
    "autoprefixer": "9.2.0",
    "browser-sync": "2.26.3",
    "browser-sync-webpack-plugin": "2.2.2",
    "cache-loader": "1.2.2",
    "chai": "4.1.2",
    "chai-as-promised": "7.1.1",
    "copy-webpack-plugin": "4.5.2",
    "core-js": "2.5.7",
    "cross-env": "5.2.0",
    "css-loader": "1.0.0",
    "enzyme": "3.5.0",
    "enzyme-adapter-react-16": "1.3.0",
    "enzyme-to-json": "3.3.4",
    "file-loader": "2.0.0",
    "fork-ts-checker-webpack-plugin": "0.4.9",
    "friendly-errors-webpack-plugin": "1.7.0",
    "generator-jhipster": "5.7.0",
    "html-webpack-plugin": "3.2.0",
    "husky": "1.1.0",
    "identity-obj-proxy": "3.0.0",
    "jest": "23.5.0",
    "jest-junit": "5.1.0",
    "jest-sonar-reporter": "2.0.0",
    "json-loader": "0.5.7",
    "less": "^3.9.0",
    "less-loader": "^4.1.0",
    "lint-staged": "7.3.0",
    "mini-css-extract-plugin": "0.4.2",
    "mocha": "5.2.0",
    "moment-locales-webpack-plugin": "1.0.7",
    "optimize-css-assets-webpack-plugin": "5.0.0",
    "postcss-loader": "3.0.0",
    "prettier": "1.14.3",
    "protractor": "5.4.0",
    "react-infinite-scroller": "1.2.0",
    "redux-mock-store": "1.5.3",
    "rimraf": "2.6.2",
    "sass": "1.13.0",
    "sass-loader": "7.1.0",
    "simple-progress-webpack-plugin": "1.1.2",
    "sinon": "6.1.5",
    "source-map-loader": "0.2.4",
    "sourcemap-istanbul-instrumenter-loader": "0.2.0",
    "stripcomment-loader": "0.1.0",
    "style-loader": "0.22.1",
    "swagger-ui": "2.2.10",
    "terser-webpack-plugin": "1.0.2",
    "thread-loader": "1.2.0",
    "to-string-loader": "1.1.5",
    "ts-jest": "23.1.4",
    "ts-loader": "4.5.0",
    "ts-node": "7.0.1",
    "tslint": "5.11.0",
    "tslint-config-prettier": "1.15.0",
    "tslint-eslint-rules": "5.4.0",
    "tslint-loader": "3.6.0",
    "tslint-react": "3.6.0",
    "typescript": "3.0.1",
    "webpack": "4.17.1",
    "webpack-cli": "3.1.0",
    "webpack-dev-server": "3.1.6",
    "webpack-merge": "4.1.4",
    "webpack-notifier": "1.7.0",
    "workbox-webpack-plugin": "3.4.1",
    "write-file-webpack-plugin": "4.3.2",
    "xml2js": "0.4.19"
  },
  "dependencies": {
    "@rowno/sparkline": "^3.0.1",
    "antd": "^3.11.2",
    "axios": "^0.18.0",
    "bootstrap": "^4.1.1",
    "classnames": "^2.2.5",
    "enquire-js": "^0.2.1",
    "immutability-helper": "^2.7.0",
    "immutable": "^3.8.2",
    "lodash": "^4.17.10",
    "moment": "^2.19.3",
    "moment-timezone": "^0.5.14",
    "peity-react": "^0.0.7",
    "prop-types": "^15.5.10",
    "rc-drawer": "^1.4.4",
    "react": "^16.4.12",
    "react-container-query": "^0.11.0",
    "react-custom-scrollbars": "^4.2.1",
    "react-dom": "^16.4.7",
    "react-helmet": "^5.2.0",
    "react-hot-loader": "3.1.1",
    "react-infinite-scroller": "^1.1.4",
    "react-loadable": "^5.4.0",
    "react-redux": "5.0.7",
    "react-redux-spinner": "^1.1.3",
    "react-router": "^4.2.0",
    "react-router-dom": "4.3.1",
    "react-router-redux": "^5.0.0-alpha.6",
    "redux": "^3.7.2",
    "redux-act": "^1.3.0",
    "redux-devtools": "3.4.1",
    "redux-devtools-dock-monitor": "1.1.3",
    "redux-devtools-extension": "^2.13.7",
    "redux-devtools-log-monitor": "1.4.0",
    "redux-logger": "^3.0.6",
    "redux-promise-middleware": "5.1.1",
    "redux-thunk": "^2.2.0"
  },
  "scripts": {
    "prettier:format": "prettier --write \"src/**/*.{json,ts,tsx,css,scss}\"",
    "lint": "tslint --project tsconfig.json -e 'node_modules/**'",
    "lint:fix": "npm run lint -- --fix",
    "cleanup": "rimraf target/www",
    "start": "npm run webpack:dev",
    "start-tls": "npm run webpack:dev -- --env.tls",
    "test": "npm run lint && jest --coverage --logHeapUsage -w=2 --config src/test/javascript/jest.conf.js",
    "test:watch": "npm test -- --watch",
    "webpack:dev": "npm run webpack-dev-server -- --config webpack/webpack.dev.js --inline --port=9060 --env.stats=minimal",
    "webpack:dev-verbose": "npm run webpack-dev-server -- --config webpack/webpack.dev.js --inline --port=9060 --profile --progress --env.stats=normal",
    "webpack:build:main": "npm run webpack -- --config webpack/webpack.dev.js --env.stats=minimal",
    "webpack:build": "npm run cleanup && npm run webpack:build:main",
    "webpack:prod:main": "npm run webpack -- --config webpack/webpack.prod.js --profile",
    "webpack:prod": "npm run cleanup && npm run webpack:prod:main",
    "webpack:test": "npm run test",
    "webpack-dev-server": "node --max_old_space_size=4096 node_modules/webpack-dev-server/bin/webpack-dev-server.js",
    "webpack": "node --max_old_space_size=4096 node_modules/webpack/bin/webpack.js"
  },
  "lint-staged": {
    "src/**/*.js": [
      "prettier --tab-width 2 --print-width 100 --single-quote --trailing-comma all --no-semi --parser babylon --write"
    ]
  }
}
]

node-less-chokidar ์‚ฌ์šฉํ•  ๋•Œ ์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด.

์ด์— ๋Œ€ํ•œ PR ์ด ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์ง€๋งŒ 2๊ฐœ์›” ์ด์ƒ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. \node_modules\node-less-chokidar\bin\node-less-chokidar ํŒŒ์ผ์˜ ํ•ด๋‹น PR ์ปค๋ฐ‹์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(๋‹จ ๋ช‡ ์ค„) ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฐ‹ ์„ธ๋ถ€ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://github.com/sampi/node-less-chokidar/pull/14/commits/934af235d16f63edaf9b8ae04eb22e3b82917701

ํŽธ์ง‘: ์ด๊ฒƒ์€ node-less-chokidhar์—์„œ ์•„์ง ๋งˆ์Šคํ„ฐํ•˜๊ธฐ ์œ„ํ•ด ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „(less-loader) ๋ฒˆํ˜ธ๊ฐ€ 6 ์ด์ƒ์ธ ๊ฒฝ์šฐ:
"์ ์€ ๋กœ๋”": "^6.1.0",
"๋œ": "^2.7.3",

๊ทธ๊ฒƒ์„ ์“ฐ๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์€
{
๋กœ๋”: "๋œ ๋กœ๋”",
์˜ต์…˜: {
์ ์€ ์˜ต์…˜: {
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ: ์ฐธ,
}
}
}

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „(less-loader) ๋ฒˆํ˜ธ๊ฐ€ 6 ์ด์ƒ์ธ ๊ฒฝ์šฐ:
"์ ์€ ๋กœ๋”": "^6.1.0",
"๋œ": "^2.7.3",

๊ทธ๊ฒƒ์„ ์“ฐ๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์€
{
๋กœ๋”: "๋œ ๋กœ๋”",
์˜ต์…˜: {
์ ์€ ์˜ต์…˜: {
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ: ์ฐธ,
}
}
}

ํ˜•์‹ ์ฝ”๋“œ ์Šคํƒ€์ผ:

{
  loader: 'less-loader',
  options: {
    lessOptions: {
      javascriptEnabled: true
    }
  }
}
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰