Jshint: JSHint๋ฅผ requirejs ๋ชจ๋“ˆ๋กœ ํฌํ•จํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 01์›” 21์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jshint/jshint

์•ˆ๋…•ํ•˜์„ธ์š”,

๊ฐœ๋ฐœ ์ค‘์ธ POC์˜ ์ผ๋ถ€๋กœ ๋‚ด ๊ฐ๋„ ์•ฑ์ด requirejs์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ž‘์€ ์ƒ˜ํ”Œ์„ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ JsHint๋ฅผ ํ†ตํ•ฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ nodejs๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค์˜ dist ํด๋”์—์„œ js ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ require ๋ชจ๋“ˆ๋กœ ๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
jshint_error

์žกํžˆ์ง€ ์•Š์€ TypeError: _.each๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ require๋ฅผ ํ†ตํ•ด ๋กœ๋“œํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ชจ๋“ˆ์€ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋ฐ ๊ฐ๋„์ฒ˜๋Ÿผ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. underscore.js๋ฅผ ํฌํ•จํ•˜์—ฌ jshint ์ „์— ๋กœ๋“œํ–ˆ์ง€๋งŒ ์•„๋ฌด ์†Œ์šฉ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ jshint์˜ ๋ฒ„๊ทธ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ œ๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? ์•„๋ž˜๋Š” ๋‚ด requirejs ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํ•‘์„ ์œ„ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

require.config({
baseUrl: '์Šคํฌ๋ฆฝํŠธ',
๊ฒฝ๋กœ: {
'jshint': 'lib/jshint/jshint',
'๊ฐ๋„': 'lib/angular/angular.min',
'angular-route': 'lib/angular/angular-route.min'

},
shim: {
    'app': {
        deps: ['jshint','angular', 'angular-route']
    },
    'angular-route': {
        deps: ['angular']
    }
}

});

ํ•„์š”ํ•˜๋‹ค
(
[
'์•ฑ'
],
๊ธฐ๋Šฅ(์•ฑ)
{
angular.bootstrap(๋ฌธ์„œ, ['์•ฑ']);
}
);

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

์–ด๋–ป๊ฒŒ ๋“  requirejs(๋˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ AMD)๊ฐ€ ์žˆ์œผ๋ฉด lodash ๋กœ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
v2.6.3์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ v2.7.0์—์„œ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

v2.9.3 ์ƒ˜ํ”Œ์„ ๋ณด์—ฌ์ฃผ๋Š”

VM104 jshint.js:15777 
Uncaught TypeError: _.each is not a function
  require.14.lodash @ VM104 jshint.js:15777
  s @ VM104 jshint.js:6
  (anonymous function) @ VM104 jshint.js:6
  ...

๋Œ€์กฐ์ ์œผ๋กœ,

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

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

๋ฐ‘์ค„์ด jshint์˜ ์ข…์†์„ฑ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜„๋Œ€ jshint๋Š” lodash๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ lodash์™€ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ์Šคํ•๋ณผ๋ฆฐ

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค ... ์–ด๋–ค ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์–ด๋–ป๊ฒŒ ๋“  requirejs(๋˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ AMD)๊ฐ€ ์žˆ์œผ๋ฉด lodash ๋กœ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
v2.6.3์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ v2.7.0์—์„œ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

v2.9.3 ์ƒ˜ํ”Œ์„ ๋ณด์—ฌ์ฃผ๋Š”

VM104 jshint.js:15777 
Uncaught TypeError: _.each is not a function
  require.14.lodash @ VM104 jshint.js:15777
  s @ VM104 jshint.js:6
  (anonymous function) @ VM104 jshint.js:6
  ...

๋Œ€์กฐ์ ์œผ๋กœ,

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

SystemJS์—์„œ๋Š” https://github.com/systemjs/systemjs/blob/master/docs/module-formats ์— ๋”ฐ๋ผ ๋ฉ”ํƒ€์—์„œ ํ˜•์‹์„ global (AMD ๋˜๋Š” CommonJS์™€ ๋ฐ˜๋Œ€)๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . md#๊ธ€๋กœ๋ฒŒ

SystemJS.config({
    baseURL: './js',
    defaultJSExtensions: true,
    paths: {
        'jquery': './js/vendor/jquery/jquery-3.2.1.min.js',
        // ...
    },
    meta: {
        './js/vendor/codemirror/addon/lint/jshint.js': { format: 'global' }
    }
});
SystemJS.import('./js/app.js').then(function (app) {
    // ...
})

Webpack์€ ์ž๋™์œผ๋กœ ํ˜•์‹์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.

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

์–ด๋–ป๊ฒŒ ๋“  requirejs(๋˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ AMD)๊ฐ€ ์žˆ์œผ๋ฉด lodash ๋กœ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
v2.6.3์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ v2.7.0์—์„œ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

v2.9.3 ์ƒ˜ํ”Œ์„ ๋ณด์—ฌ์ฃผ๋Š”

VM104 jshint.js:15777 
Uncaught TypeError: _.each is not a function
  require.14.lodash @ VM104 jshint.js:15777
  s @ VM104 jshint.js:6
  (anonymous function) @ VM104 jshint.js:6
  ...

๋Œ€์กฐ์ ์œผ๋กœ,

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

2.6.3 ์ดํ›„์—๋Š” Underscore์—์„œ Lodash๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
'var _ = require("underscore");'๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. 2.6.3 ๋ฐ 'var _ = require("lodash");' 2.12.10์—์„œ

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