복슬이
1k
2019-03-15 22:46:50
3
83

[질문] javascript import에서 모듈간의 변수 넘기는 방법



제목을 어떻게 적어야 할지 고민을 했습니다.

질문에 내용은 


javascript에서 

import moment from "moment";
import "moment-lunar";


이런 코드가 있습니다.


실행시키면 아래와 같은 오류가 표시됩니다.


    moment-lunar.js:97 Uncaught TypeError: Cannot read property 'fn' of undefined

        at Object.<anonymous> (moment-lunar.js:97)

        at Object../node_modules/moment-lunar/moment-lunar.js (moment-lunar.js:181)

        at __webpack_require__ (bootstrap:78)

        ... 생략 ...


문제가 되는 moment-lunar.js:97 라인을 보면 

    moment.fn.solar = function (isLeanMonth) {      <--- 요기가 97 라인
        isLeanMonth = isLeanMonth === true;
        var days = lunarMonthday[this.year() - lunarMonthday[0]];
        var leap = getBitInt(days, 4, 13);
        var offset = 0;
        var loopend = leap;
        ... 생략 ...
    }


이유는 알겠습니다. import moment from "moment"; 이렇게 선언하면 moment 변수는 지역변수이기 때문에

moment-lunar에서는 접근할 수 없습니다.


여기서 질문은 "moment-lunar" 임포트 시점에서 moment 변수를  모듈에 사용할 수 있도록 할 수 있을까요?


정확한 용어를 몰라 구글링을 할 수도 없고, 답답하네요.







0
0
  • 답변 3

  • rezigrene
    637
    2019-03-15 23:57:08

    moment-lunar 안에

    import moment from "moment";

     를 넣는 건 안되나요?

    0
  • Kunie
    529
    2019-03-16 03:17:30

    import 는 브라우저에서 스크립트를 로드하는 것과는 다릅니다.

    브라우저에서 로드한 스크립트는 전역에서 공통으로 사용하도록 로드하지만,

    import 는 그 파일 안에서 사용할 외부 스크립트를 참조할 뿐입니다.


    즉,

    example.js 에서

    import 'a.js'

    import 'b.js'

    를 하면,

    example.js 안에서 a.js 와 b.js 를 참조할 수는 있지만

    b.js 에서 a.js 안의 값을 참조할 수는 없습니다.


    1
  • 복슬이
    1k
    2019-03-16 08:32:38

    [자답]

    아래처럼 경고가 나더라고요.

    WARNING in ./node_modules/moment-lunar/moment-lunar.js 12:48-55

    Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

     @ multi (webpack)-dev-server/client?http://0.0.0.0:8081 jquery vue axios vue-axios bootstrap vee-validate lodash datatables jszip datatables.net-buttons daterangepicker xlsx moment moment-lunar


    ---------------------------------
    결국엔 moment-lunar.js 소스를 변경해야되요.

    변경전
    moment = (typeof require !== 'undefined' && require !== null)
    && !require.amd
    ? require('moment')
    : this.moment;

    변경후
    moment = require('moment')


    프로그래머는 경고를 무시하면 안된다라는 옛 성인들의 말씀을 기억하게 됩니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.