2017-10-16 2 views
0

ASP.NET MVC 앱이 있습니다. 이 응용 프로그램에서는 Vue 및 webpack으로 SPA를 제작하고 있습니다. 현재이 datepicker 컨트롤을 가져 오려고합니다.Webpack을 통해 jQuery를로드 할 수 없습니다.

불행히도 webpack은 문제를 일으키는 것으로 보입니다. 주요 의존성 인 jQuery가로드되지 않는 것 같아서 이유를 이해할 수 없습니다.

_Layout.cshtml을

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
    <title>My App</title> 

    <script src="~/js/shared.bundle.js" asp-append-version="true"></script> 
</head> 

<body> 
    <h1>Hello</h1> 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      console.log("ready!"); 
     }); 
    </script> 
</body> 
</html> 

webpack.config.js

"use strict"; 

const path = require('path'); 

const webpack = require('webpack'); 

module.exports = { 
    entry: { 
     shared: './src/js/shared.js', 
     page: './src/js/page.js' 
    }, 
    plugins: [ 
     new webpack.ProvidePlugin({ 
      '$': 'jquery', 
      jQuery: 'jquery', 
      'window.jQuery': 'jquery', 
      Popper: ['popper.js', 'default'], 
      moment: 'moment', 
     }), 
     new webpack.optimize.CommonsChunkPlugin({ name: 'shared' }) 
    ], 
    output: { 
     publicPath: "/js/", 
     path: path.join(__dirname, '/dist/'), 
     filename: '[name].bundle.js' 
    }, 
    module: { 
     rules: [ 
      { 
       test: /\.js$/, 
       loader: 'babel-loader', 
       exclude: /(node_modules)/, 
       query: { 
        presets: ['es2015'] 
       } 
      }, 
      { 
       test: /\.vue$/, 
       loader: 'vue-loader', 
      } 
     ] 
    }, 
    resolve: { 
     alias: { 
      vue: 'vue/dist/vue.js' 
     }, 
     extensions: ['.js', '.vue'] 
    } 
}; 

Index.cshtml

:

나는 다음이

<h2>Welcome</h2> 
<hr /> 

<div id="view" v-cloak> 
    <div class="card"> 
     <div class="card-header"><h5>Selection Details</h5></div> 
     <div class="card-body"> 
      <div class="form-row"> 
       <div class="form-group col-8"> 
        <label for="birthdate">Birthdate</label> 
        <date-picker v-model="birthDate"></date-picker> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

<script type="text/javascript" src="~/js/page.js" asp-append-version="true"></script> 

page.js

import Vue from 'vue'; 

import datePicker from 'vue-bootstrap-datetimepicker'; 

$(document).ready(function() { 
    var v = new Vue({ 
     el: document.getElementById('view'), 
     components: { 
      "datePicker": datePicker 
     }, 
     data: { 
      birthDate: null 
     } 
    } 
}); 

이 페이지가로드 브라우저에서, 나는 콘솔 창에 다음과 같은 오류를 참조 :

catch되지 않은 ReferenceError가 : $가 정의되어 있지 않습니다

이것이 내 페이지에서 datepicker가 제대로 작동하지 않는 것으로 판단됩니다. 나는이 오류를 이해하지 못한다. 내 이해에서 new webpack.ProvidePlugin({ ... 줄이이 문제를 처리해야합니다. 생성 된 "shared.bundle.js"파일을 보면 맨 위에 jQuery 내용을 볼 수 있습니다. 이것은 나를 더욱 혼란스럽게합니다. 왜이 오류가 발생하는지 이해할 수 없습니다. 어떤 도움을 주셔서 감사합니다!

+0

[Uncaught ReferenceError : $ is not defined?] (https://stackoverflow.com/questions/2075337/uncaught-referenceerror-is-not-defined) – jordiburgos

답변

0

맞습니다. ProviderPlugin은 jquery를 전 세계적으로 사용할 수 있어야합니다.

이 라인 import $ from 'jquery';을 수입품에 첨가 해보십시오.

+0

나는 가능한 시도했지만 동일한 오류가 발생했습니다. 정말 혼란스러운 부분은 shared.bundle.js 파일에서 jQuery를 볼 수 있다는 것입니다. –

관련 문제