나는 여전히 webpack으로 모듈 경로를 해결하는 방법을 혼동하고 있습니다. 이제 나는 쓴다 :
myfile = require('../../mydir/myfile.js')
하지만 쓰고 싶습니다
myfile = require('mydir/myfile.js')
alias . 로 사용하는 비슷한 예제를 볼 수 있기 때문에 resolve.alias 가 도움이 될 수 있다고 생각했습니다 .{ xyz: "/some/dir" }
require("xyz/file.js")
나는 내 별칭을 설정하지만 { mydir: '/absolute/path/mydir' }
, require('mydir/myfile.js')
작업은하지 않습니다.
문서를 여러 번 읽었으므로 뭔가 바보 같은 느낌이 듭니다. 친척이 필요로하는 모든 것을 쓰는 것을 피하는 올바른 방법은 무엇입니까 ../../
?
답변
웹팩> 2.0
wtk의 답변을 참조하십시오 .
웹팩 1.0
이를 수행하는보다 간단한 방법은 resolve.root를 사용하는 것입니다.
http://webpack.github.io/docs/configuration.html#resolve-root
resolve.root
모듈이 포함 된 디렉토리 (절대 경로). 디렉토리 배열 일 수도 있습니다. 이 설정은 개별 디렉토리를 검색 경로에 추가하는 데 사용해야합니다.
귀하의 경우 :
웹팩 설정
var path = require('path');
// ...
resolve: {
root: path.resolve('./mydir'),
extensions: ['', '.js']
}
소비 모듈
require('myfile')
또는
require('myfile.js')
참조 : http://webpack.github.io/docs/configuration.html#resolve-modulesdirectories
답변
나중에 참조하기 위해 webpack 2 modules
는 경로를 해결하는 방법으로 모든 것을 제거했습니다 . 이 수단이 root
됩니다 하지 작동합니다.
https://gist.github.com/sokra/27b24881210b56bbaff7#resolving-options
예제 구성은 다음으로 시작합니다.
{
modules: [path.resolve(__dirname, "app"), "node_modules"]
// (was split into `root`, `modulesDirectories` and `fallback` in the old options)
답변
resolve.alias
설명 된 방식대로 작동해야하므로 원래 질문에 대한 제안으로 인해 혼란스러워하는 것을 완화하는 데 도움이되는 답변으로 제공하고 있습니다.
아래와 같은 확인 구성은 원하는 결과를 제공합니다.
// used to resolve absolute path to project's root directory (where web pack.config.js should be located)
var path = require( 'path' );
...
{
...
resolve: {
// add alias for application code directory
alias:{
mydir: path.resolve( __dirname, 'path', 'to', 'mydir' )
},
extensions: [ '', '.js' ]
}
}
require( 'mydir/myfile.js' )
예상대로 작동합니다. 그렇지 않은 경우 다른 문제가 있어야합니다.
검색 경로에 추가하려는 모듈이 여러 개인 경우에는 resolve.root
의미가 있지만 상대 경로없이 응용 프로그램 코드 내에서 구성 요소를 참조하려는 경우 alias
가장 간단하고 명시적인 것 같습니다.
중요한 장점은 코드에 명확성을 추가 할 수있는 alias
네임 스페이스 require
를 만들 수 있다는 것입니다. 다른 require
모듈에서 참조되는 모듈을 쉽게 볼 수 있듯이 내부 모듈이 필요하다는 것을 분명히하는 alias
설명을 작성할 수 있습니다 ( require
예 🙂 require( 'my-project/component' )
. resolve.root
네임 스페이스를 만들 수있는 기회를주지 않으면 서 원하는 디렉토리로 이동합니다.
답변
다른 사람 이이 문제에 부딪 치면 다음과 같이 작동시킬 수있었습니다.
var path = require('path');
// ...
resolve: {
root: [path.resolve(__dirname, 'src'), path.resolve(__dirname, 'node_modules')],
extensions: ['', '.js']
};
내 디렉토리 구조는 다음과 같습니다.
.
├── dist
├── node_modules
├── package.json
├── README.md
├── src
│ ├── components
│ ├── index.html
│ ├── main.js
│ └── styles
├── webpack.config.js
그런 다음 src
디렉토리의 어느 곳에서나 전화 할 수 있습니다.
import MyComponent from 'components/MyComponent';
답변
가장 큰 두통은 네임 스페이스 경로없이 일하고있었습니다. 이 같은:
./src/app.js
./src/ui/menu.js
./node_modules/lodash/
내가 이것을하기 위해 환경을 설정하기 전에 :
require('app.js')
require('ui/menu')
require('lodash')
src
중요한 컨텍스트 정보를 숨기는 암시 적 경로를 피하는 것이 훨씬 더 편리하다는 것을 알았습니다 .
내 목표는 다음과 같습니다.
require('src/app.js')
require('src/ui/menu')
require('test/helpers/auth')
require('lodash')
보시다시피, 모든 앱 코드는 필수 경로 네임 스페이스 내에 있습니다. 이것은 호출이 라이브러리, 앱 코드 또는 테스트 파일을 필요로한다는 것을 분명히합니다.
이를 node_modules
위해 소스 폴더 안에 앱의 네임 스페이스를 지정하지 않는 한 내 해결 경로가 현재 앱 폴더 인지 확인하고src/my_app
이것은 webpack의 내 기본값입니다.
resolve: {
extensions: ['', '.jsx', '.js', '.json'],
root: path.resolve(__dirname),
modulesDirectories: ['node_modules']
}
환경 변수 NODE_PATH
를 현재 프로젝트 파일로 설정하면 더 좋습니다 . 이것은보다 보편적 인 솔루션이며 웹 팩없이 다른 도구를 사용하려면 테스트, 보푸라기 …
답변
다음과 같이 Webpack 2로 해결했습니다.
module.exports = {
resolve: {
modules: ["mydir", "node_modules"]
}
}
배열에 디렉토리를 더 추가 할 수 있습니다 …
답변
Webpack 2를 사용 하여이 문제를 해결했습니다.
resolve: {
extensions: ['', '.js'],
modules: [__dirname , 'node_modules']
}