2017-04-11 16 views
0

이 있어야되지모듈 로더 내가이</p> <p>lib.js 같은 외모를 수입하고있는 파일 중 하나에서 UMD 모듈로 배포되는 LIB하고 코드를 사용하고 정상 또는 피치 기능

(function (global, factory) { 
    if (typeof define === "function" && define.amd) { 
     define(['exports', '../utils/require-isdefined-plugin!lodash'], factory); 
    } else if (typeof exports !== "undefined") { 
     factory(exports, require('lodash')); 
    } else { 
     var mod = { 
      exports: {} 
     }; 
     factory(mod.exports, global.lodash); 
     global.registry = mod.exports; 
    } 
})(this, function (exports, _lodash) { 
    'use strict'; 
    // Library code 
}) 

와 나는이 내 코드와 실행 웹팩에 lib.js 사용할 때 지금,이 오류를

오류가 발생합니다 : 모듈 'H를 : 프로젝트 \ \ ABC \ UMD \ 응용 프로그램 \ UTILS \ 필요-다음 IsDefined-플러그인을 .js '가 로더가 아닙니다 (정상 또는 피치 기능이 있어야 함)

나는 webpack이 "../utils/require-isdefined-plugin"을 로더로 간주하고 불평한다고 생각합니다.

내 질문에 내가 어떻게 웹팩이 로더 아니라는 것을 알고 정상적으로

이 일을하는 다른 방법이이 파일을 실행하도록 할 수있다?

답변

1

가장 쉽고 솔직히 말해서 가장 좋은 해결책은 다른 빌드를 사용하는 것입니다. 오늘날 대부분의 라이브러리에는 npm 패키지와 UMD 빌드가 있습니다.

Shimming - imports-loader 같이 당신이 AMD define을 해제 imports-loader를 사용할 수있는 옵션이 아니므로 웹팩은 만지지 않고 commonjs 버전을 사용됩니다. 즉 가져온 방법 경우 require.resolve('lib')

{ 
    test: require.resolve('./path/to/lib'), 
    loader: 'imports-loader?define=>false' 
} 

require.resolve 정규 require와 동일하게 작동하지만, 당신이 대신 내용의 해결 모듈의 전체 경로를 제공합니다, 그래서 당신은 여전히 ​​수행 할 수 있습니다 당신은 라이브러리에 대한 규칙을 추가 그것.

동일한 파일에 대한 두 가지 규칙이 일반적으로 잘 끝나지 않으므로 안전을 위해 일반 .js 규칙에서 라이브러리를 제외해야합니다. 규칙은 다음과 같습니다.

rules: [ 
    { 
    test: /\.js$/, 
    loader: 'babel-loader', 
    exclude: [/node_modules/, require.resolve('./path/to/lib')] 
    }, 
    { 
    test: require.resolve('./path/to/lib'), 
    loader: 'imports-loader?define=>false' 
    } 
]