2016-08-21 1 views
6

webpack을 처음 사용하지만 필자는 내 프로젝트 중 하나에서 배우기 시작했습니다. 나는 내가 다음과 같은 오류지고있어 응용 프로그램 실행 그러나 때, 부트 스트랩과 jQuery를 사용하고 싶습니다 : 내 웹팩 설정에서오류 : 부트 스트랩의 JavaScript에서 Webpack을 사용하여 jQuery가 필요합니다.

bootstrap.min.js?5802:6Uncaught Error: Bootstrap's JavaScript requires jQuery 

을, 나는 두 가지 진입 점, 프로젝트의 라이브러리에 대한 하나를 정의 jquery, bootstrap 등과 같은 벤더 (vendor)라고 불리는 외부의 것들을 위해 하나씩. 벤더에서는, jquery 라이브러리 후에 부트 스트랩 라이브러리를 정의했다. 그러나 내가 놓친 것에 대한 단서, 오류를 제거 할 수 없다.

이 내 웹 애플리케이션 설정,

import webpack from 'webpack'; 
import HtmlWebpackPlugin from 'html-webpack-plugin'; 
import autoprefixer from 'autoprefixer'; 
let node_dir = __dirname + '/node_modules'; 

export default { 
    resolve: { 
    extensions: ['', '.js', '.jsx'], 
    alias: { 
     'jquery': node_dir + '/jquery/dist/jquery.js', 
     'jquery-validation': node_dir + '/jquery-validation/dist/jquery.validate.js', 
     'bootstrap': node_dir + '/bootstrap/dist/js/bootstrap.min.js' 
    } 
    }, 
    debug: true, 
    devtool: 'cheap-module-eval-source-map', // more info:https://webpack.github.io/docs/build-performance.html#sourcemaps and https://webpack.github.io/docs/configuration.html#devtool 
    noInfo: true, // set to false to see a list of every file being bundled. 

    entry: { 
    // must be first entry to properly set public path 
    app: ['./src/webpack-public-path', 
     'webpack-hot-middleware/client?reload=true', 
     './src/index'], 
    vendors: ['jquery','jquery-validation','bootstrap'] 
    }, 
    target: 'web', // necessary per https://webpack.github.io/docs/testing.html#compile-and-test 
    output: { 
    path: `${__dirname}/src`, // Note: Physical files are only output by the production build task `npm run build`. 
    publicPath: '/', 
    filename: 'bundle.js' 
    }, 
    plugins: [ 
    new webpack.DefinePlugin({ 
     'process.env.NODE_ENV': JSON.stringify('development'), // Tells React to build in either dev or prod modes. https://facebook.github.io/react/downloads.html (See bottom) 
     __DEV__: true 
    }), 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NoErrorsPlugin(), 
    new HtmlWebpackPlugin({  // Create HTML file that includes references to bundled CSS and JS. 
           //template: 'src/index.ejs', 
     template: 'src/index.html', 
     minify: { 
     removeComments: true, 
     collapseWhitespace: true 
     }, 
     inject: true 
    }), 
    new webpack.ProvidePlugin({ 
     $: "jquery", 
     jquery: "jquery", 
     "windows.jQuery": "jquery" 
    }), 
    new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors.js', Infinity) 
    ], 
    module: { 
    loaders: [ 
     {test: /\.jsx?$/, exclude: /node_modules/, loaders: ['babel']}, 
     {test: /\.eot(\?v=\d+.\d+.\d+)?$/, loader: 'file'}, 
     {test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url?limit=10000&mimetype=application/font-woff"}, 
     {test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=application/octet-stream'}, 
     {test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=image/svg+xml'}, 
     {test: /\.(jpe?g|png|gif)$/i, loader: 'file?name=[name].[ext]'}, 
     {test: /\.ico$/, loader: 'file?name=[name].[ext]'}, 
     {test: /(\.css|\.scss)$/, loaders: ['style', 'css?sourceMap', 'postcss', 'sass?sourceMap']} 
    ] 
    }, 
    postcss:()=> [autoprefixer] 
}; 

그리고 이것은 내 package.json 파일입니다

{ 
    "name": "dario-webapplication", 
    "version": "1.0.0", 
    "description": "Webapplication for Dario project", 
    "engines": { 
    "npm": ">=3" 
    }, 
    "scripts": { 
    "preinstall": "node tools/nodeVersionCheck.js", 
    "setup": "node tools/setup/setupMessage.js && npm install && node tools/setup/setup.js", 
    "remove-demo": "babel-node tools/removeDemo.js", 
    "start-message": "babel-node tools/startMessage.js", 
    "prestart": "npm-run-all --parallel start-message remove-dist", 
    "start": "npm-run-all --parallel open:src lint:watch", 
    "open:src": "babel-node tools/srcServer.js", 
    "open:dist": "babel-node tools/distServer.js", 
    "lint": "esw webpack.config.* src tools --color", 
    "lint:watch": "npm run lint -- --watch", 
    "clean-dist": "npm run remove-dist && mkdir dist", 
    "remove-dist": "rimraf ./dist", 
    "prebuild": "npm run clean-dist && npm run lint && npm run test", 
    "build": "babel-node tools/build.js && npm run open:dist", 
    "test": "mocha tools/testSetup.js \"src/**/*.spec.js\" --reporter progress", 
    "test:cover": "babel-node node_modules/isparta/bin/isparta cover --root src --report html node_modules/mocha/bin/_mocha -- --require ./tools/testSetup.js \"src/**/*.spec.js\" --reporter progress", 
    "test:cover:travis": "babel-node node_modules/isparta/bin/isparta cover --root src --report lcovonly _mocha -- --require ./tools/testSetup.js \"src/**/*.spec.js\" && cat ./coverage/lcov.info | node_modules/coveralls/bin/coveralls.js", 
    "test:watch": "npm run test -- --watch", 
    "open:cover": "npm run test:cover && open coverage/index.html" 
    }, 
    "author": "Francisco Jose Parra Gonzalez", 
    "license": "MIT", 
    "dependencies": { 
    "bootstrap": "3.3.7", 
    "jquery": "2.1.4", 
    "jquery-validation": "1.15.1", 
    "object-assign": "4.1.0", 
    "react": "15.3.0", 
    "react-bootstrap": "0.30.3", 
    "react-dom": "15.3.0", 
    "react-redux": "4.4.5", 
    "react-router": "2.6.1", 
    "react-router-redux": "4.0.5", 
    "redux": "3.5.2", 
    "redux-thunk": "2.1.0" 
    }, 
    "devDependencies": { 
    "autoprefixer": "6.4.0", 
    "babel-cli": "6.11.4", 
    "babel-core": "6.11.4", 
    "babel-loader": "6.2.4", 
    "babel-plugin-react-display-name": "2.0.0", 
    "babel-plugin-transform-react-remove-prop-types": "0.2.9", 
    "babel-preset-es2015": "6.9.0", 
    "babel-preset-react": "6.11.1", 
    "babel-preset-react-hmre": "1.1.1", 
    "babel-preset-stage-1": "6.5.0", 
    "babel-register": "6.11.6", 
    "browser-sync": "2.14.0", 
    "chai": "3.5.0", 
    "chalk": "1.1.3", 
    "connect-history-api-fallback": "1.2.0", 
    "coveralls": "2.11.12", 
    "cross-env": "2.0.0", 
    "css-loader": "0.23.1", 
    "enzyme": "2.4.1", 
    "eslint": "3.2.2", 
    "eslint-plugin-import": "1.12.0", 
    "eslint-plugin-jsx-a11y": "2.0.1", 
    "eslint-plugin-react": "6.0.0", 
    "eslint-watch": "2.1.14", 
    "extract-text-webpack-plugin": "1.0.1", 
    "file-loader": "0.9.0", 
    "html-webpack-plugin": "2.22.0", 
    "isparta": "4.0.0", 
    "mocha": "3.0.1", 
    "mockdate": "1.0.4", 
    "node-sass": "3.8.0", 
    "npm-run-all": "2.3.0", 
    "open": "0.0.5", 
    "postcss-loader": "0.9.1", 
    "prompt": "1.0.0", 
    "react-addons-test-utils": "15.3.0", 
    "redux-immutable-state-invariant": "1.2.3", 
    "replace": "0.3.0", 
    "rimraf": "2.5.4", 
    "sass-loader": "4.0.0", 
    "sinon": "1.17.5", 
    "sinon-chai": "2.8.0", 
    "style-loader": "0.13.1", 
    "url-loader": "0.5.7", 
    "webpack": "1.13.1", 
    "webpack-dev-middleware": "1.6.1", 
    "webpack-hot-middleware": "2.12.2", 
    "webpack-md5-hash": "0.0.5" 
    }, 
    "keywords": [], 
    "repository": { 
    "type": "git", 
    "url": "" 
    } 
} 

답변

13

마침내 오류를 제거있어 단지 ProvidePlugin에 새 항목을 추가하여 :

jQuery:"jquery" 

그래서 마지막으로 플러그인은 다음과 같습니다

new webpack.ProvidePlugin({ 
    $: "jquery", 
    jquery: "jquery", 
    "window.jQuery": "jquery", 
    jQuery:"jquery" 
}) 

다른 사람이 같은 문제에 직면 할 경우를 대비하여 여기에 두십시오.

2

당신은 또한 Expose Loader 패키지를 추가 할 수 있습니다

npm install expose-loader --save-dev 

을 그리고 당신의 웹팩 엔트리 포인트에 사용. (즉, main.js)이 같은 :

import 'expose?$!expose?jQuery!jquery' 

// ... 
+0

require ("expose? jQuery! jquery"); require ("노출하다! 테더! 테더"); – masonk

+0

또는 가져 오기 'expose-loader? $! expose-loader? jQuery! jquery' – Navin

5

Create React App를 사용하면 다음과 같이 가져올 수 있습니다

import 'jquery/src/jquery'; 
import '../node_modules/bootstrap-sass/assets/javascripts/bootstrap.min'; 

참고 : jQuery 3 용입니다. *

+0

Perfekt! 단순하고 작동합니다. –