问题描述
我正在使用webpack创建* .js包
I am using webpack to create a *.js bundle
var path = require('path');
var webpack = require('webpack');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
entry: {
site: [
'./wwwroot/js/site.js',
'./node_modules/jquery/dist/jquery.js',
'./Scripts/jquery.global.js',
'./node_modules/jquery-validation/dist/jquery.validate.js',
'./node_modules/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js',
'./node_modules/popper.js/dist/popper.js',
'./node_modules/bootstrap/dist/js/bootstrap.js',
]
},
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'wwwroot/dist/')
},
module: {
rules: [
{
test: /\.tsx?$/,
loader: 'ts-loader',
exclude: /node_modules/,
},
{
test: /\.css$/,
loader: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader'
})
},
]
},
resolve: {
extensions: [".tsx", ".ts", ".js", ".css"]
},
plugins: [
new ExtractTextPlugin('../css/bundle.css'),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
Popper: ['popper.js', 'default']
})
]
};
然后在 _Layout.cshtml
我有以下代码:
...
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© 2017 - MVC_Movie</p>
</footer>
</div>
<environment include="Development">
<script src="~/js/site.js" asp-append-version="true"></script>
<script src="~/dist/bundle.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="">
</script>
<script src="http://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
crossorigin="anonymous"
integrity="">
</script>
<script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>
@RenderSection("Scripts", required: false)
<script>
$(document).ready(function () {
debugger;
//Ask ASP.NET what culture we prefer, because we stuck it in a meta tag
var data = $("meta[name='accept-language']").attr("content")
//Tell jQuery to figure it out also on the client side.
$.global.preferCulture(data);
//Tell the validator, for example,
// that we want numbers parsed a certain way!
$.validator.methods.number = function (value, element) {
if ($.global.parseFloat(value)) {
return true;
}
return false;
}
});
</script>
</body>
</html>
到目前为止,我没有收到任何错误来生成 bundle.js
文件看起来不错,但 _Layout.cshtml
底部的部分引发异常
So far I don't get any errors to generate the bundle.js
file looks fine, but the section at the bottom of the _Layout.cshtml
raises an exception
我认为在<$ c $中定义c> webpack.config.js 插件部分符号 $
将被识别:
I thought by defining in the webpack.config.js
the plugin section the symbol $
would be recognized:
plugins: [
new ExtractTextPlugin('../css/bundle.css'),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
Popper: ['popper.js', 'default']
})
]
知道如何让它运作吗?
推荐答案
似乎有一个解决方案是将jQuery模块暴露在webpack包之外。
One solution it seems to work is to expose the jQuery module outside of the webpack bundle.
module: {
rules: [
{
test: /\.tsx?$/,
loader: 'ts-loader',
exclude: /node_modules/,
},
{
test: /\.css$/,
loader: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader'
})
},
{
// Exposes jQuery for use outside Webpack build
test: require.resolve('jquery'),
use: [{
loader: 'expose-loader',
options: 'jQuery'
}, {
loader: 'expose-loader',
options: '$'
}]
}
]
},
此处的解决方案: @harmsmsrelrel
Solution found here: Managing jQuery plugin dependency in webpack @harlemsquirrel
这篇关于未捕获的ReferenceError:$未定义Webpack和嵌入式脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!