Javascript 网页包要求(jquery)赢得';行不通
我刚开始使用webpack,正在尝试同步加载jquery 这是我的main.jsJavascript 网页包要求(jquery)赢得';行不通,javascript,jquery,webpack,Javascript,Jquery,Webpack,我刚开始使用webpack,正在尝试同步加载jquery 这是我的main.js var $ = require('jquery'); require('javascript/index.js'); require('less/index.less'); 这是我的webpack.config var ExtractTextPlugin = require("extract-text-webpack-plugin"); var path = require('path'); module.e
var $ = require('jquery');
require('javascript/index.js');
require('less/index.less');
这是我的webpack.config
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var path = require('path');
module.exports = {
entry: './assets/javascript/main.js',
output: {
path: './assets',
filename: '/javascript/bundle.js'
},
module : {
loaders : [
{
test: /\.css/,
loader: ExtractTextPlugin.extract("style-loader", "css-loader")
},
{
test: /\.less$/,
loader: ExtractTextPlugin.extract("style-loader", "css-loader!less-loader")
}
]
},
plugins: [
new ExtractTextPlugin("/css/[name].css")
],
resolve : {
root: path.resolve('./assets'),
extensions: ['', '.js', '.less']
}
};
我的index.js如下所示
$(document).ready(function () {
var body = $('body');
var backgrounds = new Array(
'url(./../images/bg1.jpg)' ,
'url(./../images/bg2.jpg)' ,
'url(./../images/bg3.jpg)' ,
'url(./../images/bg4.jpg)'
);
var current = 0;
function nextBackground() {
console.log("Changing bg");
current++;
current = current % backgrounds.length;
body.css('background-image', backgrounds[current]);
}
setInterval(nextBackground, 1000);
body.css('background-image', backgrounds[0]);
});
执行时抛出错误
Uncaught ReferenceError: $ is not defined
我真的不理解这个错误,因为如果我查看生成的bundle.js,Jquery显然是被定义的
我已尝试将此添加到我的解决方案中:
resolve : {
root: path.resolve('./assets'),
extensions: ['', '.js', '.less'],
alias: {
jquery: "jquery"
}
}
但错误仍然存在
编辑:这是创建的bundle.js的一个片段
var $ = __webpack_require__(2);
__webpack_require__(3);
__webpack_require__(4);
根据您的代码,您需要将其添加到您的index.js
var $ = require('jquery');
这是因为当您使用webpack构建代码时,每个文件(例如index.js)都会被包装成一个由webpack定义的函数
因此main.js中定义的所有变量都无法访问index.js,因为它们现在处于不同的函数中,不共享相同的作用域
您可以使用向全局(窗口
)公开jquery,也可以手动要求使用jquery
希望这能解决您的问题。:) 根据您的代码,您需要将其添加到您的index.js
var $ = require('jquery');
这是因为当您使用webpack构建代码时,每个文件(例如index.js)都会被包装成一个由webpack定义的函数
因此main.js中定义的所有变量都无法访问index.js,因为它们现在处于不同的函数中,不共享相同的作用域
您可以使用向全局(窗口
)公开jquery,也可以手动要求使用jquery
希望这能解决您的问题。:) 您需要的是: 自动加载模块。当标识符(键)用作模块中的自由变量时,将加载模块(值)。标识符由加载模块的导出填充 例如: 将此插件添加到您的配置:
new webpack.ProvidePlugin({
$: "jquery"
})
在代码中的某个地方:
// in a module
$("#item") // <= just works
// $ is automatically set to the exports of module "jquery"
//在模块中
$(“#项”)//您要查找的是:
自动加载模块。当标识符(键)用作模块中的自由变量时,将加载模块(值)。标识符由加载模块的导出填充
例如:
将此插件添加到您的配置:
new webpack.ProvidePlugin({
$: "jquery"
})
在代码中的某个地方:
// in a module
$("#item") // <= just works
// $ is automatically set to the exports of module "jquery"
//在模块中
$(“#item”)//仅要求jquery不起作用吗?如果我查看bundle.js
它似乎要求所有内容都正确。(也是jquery)只要求jquery不起作用吗?如果我查看bundle.js
它似乎要求所有东西都正确。(也是jquery)啊,我知道,在我的例子中,$只是在函数中本地定义的。谢谢你清理这个,它正在工作。我也会调查-loader@JakobAbfalter确切地享受:)啊,我明白,在我的例子中,$只是在函数中本地定义的。谢谢你清理这个,它正在工作。我也会调查-loader@JakobAbfalter确切地享受:)