브라우저의 개발자 콘솔 내에서 액세스 할 수있는 전역 창 개체에 jQuery 개체를 노출하고 싶습니다. 이제 내 webpack 구성에 다음 줄이 있습니다.
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
]
이 줄은 내 웹팩 모듈의 각 파일에 jQuery 정의를 추가합니다. 그러나 프로젝트를 빌드하고 다음과 같이 개발자 콘솔에서 jQuery에 액세스하려고 할 때 :
window.$;
window.jQuery;
이 속성이 정의되지 않았다고합니다 …
이 문제를 해결할 방법이 있습니까?
답변
expose-loader 를 사용해야합니다 .
npm install expose-loader --save-dev
필요한 경우 다음 중 하나를 수행 할 수 있습니다.
require("expose?$!jquery");
또는 구성에서 다음을 수행 할 수 있습니다.
loaders: [
{ test: require.resolve('jquery'), loader: 'expose?jQuery!expose?$' }
]
UPDATE :로 웹팩 2, 당신은 사용할 필요가 노출 로더를 대신 노출 :
module: {
rules: [{
test: require.resolve('jquery'),
use: [{
loader: 'expose-loader',
options: '$'
}]
}]
}
답변
ProvidePlugin은 각각의 가져 오기를 통해 다른 소스의 심볼을 대체하지만 전역 네임 스페이스의 심볼을 노출하지 않습니다. 고전적인 예는 jQuery 플러그인입니다. 대부분은 jQuery
전역 적으로 정의 되기를 기대 합니다. 를 사용하면 ProvidePlugin
jQuery가 종속성 (예 : 이전에로드 됨)인지 확인 jQuery
하고 코드에서 의 발생 이 require('jquery')
.
심볼에 의존하는 외부 스크립트가 전역 네임 스페이스에있는 경우 (예 : 외부에서 호스팅 된 JS, 자바 스크립트가 Selenium에서 호출하거나 단순히 브라우저의 콘솔에서 심볼에 액세스하는 경우) expose-loader
대신 을 사용하고 싶습니다 .
간단히 말해서, ProvidePlugin은 전역 심볼에 대한 빌드 타임 종속성을 expose-loader
관리 하는 반면은 전역 심볼에 대한 런타임 종속성을 관리합니다.
답변
window
객체가 모든 모듈에 노출 된 것 같습니다 .
그냥 가져 오기 / 요구 JQuery
하고 넣지 않는 이유 :
window.$ = window.JQuery = JQuery;
window.JQuery
필요한 모듈이나 사용중인 모듈에서를 사용하는 모듈을 요청 / 가져 오기 전에이 문제가 발생하는지 확인해야합니다 .
답변
이것은 항상 나를 위해 일했습니다. 대한 포함 웹팩 3 window.$ = window.jQuery = require("jquery");
답변
위의 어느 것도 나를 위해 일하지 않았습니다. (그리고 노출 로더 구문이 정말 마음에 들지 않습니다). 대신
webpack.config.js에 추가했습니다.
var webpack = require('webpack');
module.exports = {
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
})
]
}
모든 모듈은 $를 통해 jQuery를 통해 액세스 할 수 있습니다.
webpack에 번들로 제공되는 모듈에 다음을 추가하여 창에 노출 할 수 있습니다.
window.$ = window.jQuery = $
답변
Webpack v2 업데이트
Matt Derrick이 설명한대로 노출 로더 를 설치합니다 .
npm install expose-loader --save-dev
그런 다음에 다음 스 니펫을 삽입하십시오 webpack.config.js
.
module.exports = {
entry: {
// ...
},
output: {
// ...
},
module: {
loaders: [
{ test: require.resolve("jquery"), loader: "expose-loader?$!expose-loader?jQuery" }
]
}
};
답변
내 경우에는 작동합니다.
{ test: require.resolve("jquery"), loader: "expose?$!expose?jQuery" }