2016-11-04 1 views
19

webpack을 bundler로 사용하는 응용 프로그램을 가져와야하는 구식 일반 ES5 JavaScript가 있습니다. 문제는 이러한 파일의 위치가 경로가 동적 인 폴더에 있다는 것입니다. webpack이 requirerequire.context의 표현식과 잘 작동하지 않는 것으로 보입니다. 모든 디렉토리에있는 파일과 하위 디렉토리를 필요로하는 것으로 알려져 경로 디렉토리에 대한동적 디렉토리에서 webpack을 사용하여 JavaScript를 요구하는 방법

는,이 방법은 작동합니다

let domainRequires = require.context('./app/domain', true, /\.js$/); domainRequires.keys().forEach(domainRequires);

내가 require.context에 식을 사용할 수 없기 때문에, 그냥 시도 일반 require 및 사용이 를 작동하지 않습니다 :

require('../../path/to/code/my-library-' + versionNumber + '/domain/clazz.js');

전체 상대 경로 사용

require.context('../../path/to/code', true, /^my-library-.*\/domain\/.*\.js$/);

어떤 생각, 제안, 솔루션은 환영받을 것이다 :

는 또한 require.context을 사용하지만, 정규식 부분을 강화하는 것은이 작업과 행운이 없었어요 얻기 위해 시도했습니다. 웹팩으로 제 3자를 사용할 필요가 있다면 괜찮습니다.

답변

9

나는 이것을 알아 냈습니다. 웹팩 resolve.alias를 사용하여, 내가 추가 할 수

resolve: { 
    alias: { 
    common: path.resolve(__dirname, '../../path/to/code/my-library-' + versionNumber + '/domain') 
    } 
} 

webpack.config에. versionNumber I를 얻기 위해,

require('common/clazz.js'); // ../../path/to/code/my-library-1.0.0/domain/clazz.js 

FWIW : 나는 통해 하나의 파일을 얻을 수, 마찬가지로

var commonRequires = require.context('common', true, /\.js$/); 
commonRequires.keys().forEach(commonRequires); 

:

그런 다음 내 코드에서, 나는 통해 /domain 아래에있는 모든 파일을 필요로 할 수있다 사용 된 노드의 fs 모듈을 json 파일에서 읽으려면 JSON.parse(file)을 사용하고 상단의 버전을 webpack.config

+0

동적 변수가 여러 개인 경우 어떻게해야합니까? 루프에서 요구해야합니다. 이것은 진짜 고통입니다. 왜 그들이 구현하기가 어렵게 만들었는지 모르겠다. – tylik

+0

이 솔루션은 루프를 필요로한다. forEach를 참조하십시오. @tylik –

0

Webpack 3.9 (제 생각에는) commonRequires은 필요하지 않습니다.

resolve: { 
    alias: { 
    tmpDir: path.resolve(__dirname, '/tmp') 
    } 
} 

그리고으로 나는 내 사용자 정의 모듈을로드 : 내가 webpack.config.js이 실행

const dynModule = require('tmpDir/dyn_module.js'); 

내가 확실하지 귀하의 요구 사항에서 뭔가를 그리워하지만 commonRequires이 나에게 필요하지 않은 경우 Webpack은 이것을 잘 구현합니다 (그리고 작동합니다).

+0

안녕하세요 @ 앤더스, 맞습니다. 'commonRequires'는 솔루션과 전혀 관련이 없습니다 (그런 식으로 해석되지 않았습니다).이것은 동적 경로에 있던 디렉토리의 모든 파일을 요구하는 예입니다. 당신이 받아 들인 대답을 되돌아 보면, 나는 또한 다음과 같이 언급했다 : "마찬가지로, 나는 하나의 파일을 얻을 수있다." –

관련 문제