Как настроить и использовать jQuery с webpack



У меня есть очень простой проект для тестирования функции jQuery с webpack. Однако я столкнулся с ошибками на этапе связки. Вот ошибки:



ERROR in ./~/jQuery/lib/node-jquery.js
Module not found: Error: Cannot resolve module 'jsdom' in /home/mypc/IdeaProject/OpenDimSum/frontend/node_modules/jQuery/lib
@ ./~/jQuery/lib/node-jquery.js 5:13-29

ERROR in ./~/jQuery/lib/node-jquery.js
Module not found: Error: Cannot resolve module 'xmlhttprequest' in /home/mypc/IdeaProject/OpenDimSum/frontend/node_modules/jQuery/lib
@ ./~/jQuery/lib/node-jquery.js 8:28-53

ERROR in ./~/jQuery/lib/node-jquery.js
Module not found: Error: Cannot resolve module 'location' in /home/mypc/IdeaProject/OpenDimSum/frontend/node_modules/jQuery/lib
@ ./~/jQuery/lib/node-jquery.js 13:24-43

ERROR in ./~/jQuery/lib/node-jquery.js
Module not found: Error: Cannot resolve module 'navigator' in /home/mypc/IdeaProject/OpenDimSum/frontend/node_modules/jQuery/lib
@ ./~/jQuery/lib/node-jquery.js 17:25-45


Вот мои конфигурационные файлы:

пакет.json



{
"name": "frontend",
"version": "1.0.0",
"description": "",
"main": "index.jsx",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"babel-core": "^6.17.0",
"babel-loader": "^6.2.5",
"babel-preset-es2015": "^6.16.0",
"babel-preset-react": "^6.16.0",
"jquery": "^2.2.2",
"react": "file:node_modules/react",
"react-dom": "file:node_modules/react-dom",
"webpack": "^1.13.2",
"webpack-dev-server": "^1.16.2"
}
}


Webpack.конфиг.js



var webpack = require('webpack')
var path = require('path')

var BUILD_DIR = path.resolve(__dirname, 'src/client/public');
var APP_DIR = path.resolve(__dirname, 'src/client/app');

var config = {
entry: APP_DIR + '/index.jsx',
output: {
path: BUILD_DIR,
filename: 'bundle.js',
publicPath: 'public',
},
module: {
loaders: [
{

test: /.jsx?/,
include: APP_DIR,
loader: 'babel'
},
{
test: /.css/,
include: APP_DIR,
}
]
},

};

module.exports = config;


Индекс.jsx:



import React from 'react'
import {render} from 'react-dom'
import $ from 'jQuery'


(function () {

$(document).ready(function() {
console.log("It works!");
});

})();


Если я установлю упомянутые модули (jsdom, xmlhttprequest,..), ошибки будут заменены очень длинными ошибками.

605   1  

1 ответ:

Можно использовать webpack.ProvidePlugin для разрешения jQuery в качестве глобального идентификатора. При использовании ProvidePlugin вы не хотите импортировать jQuery в модули, так как он будет доступен как глобальная переменная.

Что-то вроде

plugins: [
    new webpack.ProvidePlugin({
        $: "jquery",
        jQuery: "jquery"
    })
]

Comments

    Ничего не найдено.