2016-06-01 5 views
1

문제 : SPA의 코드를 여러 번들로 나눕니다. 각 번들에는 고유 한 버전이 있습니다. 그래서 prod에서 우리는 사용자의 설정에 따라 다른 버전의 번들을 사용하고자합니다. 따라서 모듈 ID가 동일한 모듈의 버전간에 변경되지 않도록해야합니다.Webpack : 모듈 ID를 재정의하는 방법?

가능한 해결책 중 하나는 config에 recordsPath을 정의하고 VC 아래에 레코드 파일을 저장하는 것입니다. 그러나 우리는 libs를 업데이트 할 때 항상 파일이 커집니다.

또 다른 옵션은 webpack이 Compilation.prototype.applyModuleIds에 모듈 ID를 생성하는 방법을 재정의하는 것입니다 (예 : 모듈에 대한 상대 경로를 모듈 ID로 사용할 수 있음).

이 작업을 수행해도 안전합니까? 아니면 방금 놓친 것이 있으며 문제를 처리 할 수있는 웹팩 기능이나 플러그인이 있습니까?

답변

1

Webpack 1.9.x에서 완벽하게 안전합니다. YMMV와 webpack 2,하지만 나는 그 방법의 단순성 때문에 그렇게 기대하지 않을 것이다.

동일한 모듈에 항상 동일한 ID가 주어지면 webpack은 정상적으로 작동합니다. 나는 다음과 같은 구현을 사용하여 종료 :

var md5 = require('md5'); 

module.exports = function handleWebpackModuleSymlinks(Compilation) { 
    Compilation.prototype.applyModuleIds = function() { 
    this.modules.forEach(function(module) { 
     if (module.id === null) { 
     module.id = md5(module.userRequest); 
     } 
    }, this); 
    }; 
} 

이 상자 밖으로 작동합니다 행위는 각 파일에 대한 해결 절대 경로를 기반으로 모듈 해시를 생성하지만 난으로 인해 사용에 자신을 구현하는 데 필요한 것 symlink는 node_modules의 개발 중에 기본 경로 비교 로직을 던집니다. 의도 한 효과를 얻기 위해 정규 표현식을 사용하여 해싱 이전에 리소스 경로의 버전 구성 요소를 대체 할 수 있습니다.

관련 문제