【发布时间】:2018-01-04 18:11:09
【问题描述】:
这是一个非常奇怪的问题,因为实际上,一些捆绑的代码正在被执行。我为我的 CSS 使用样式加载器,它当然会被放入 bundle.js 并加载并正常工作。但是,我还有一个文件,其中包含一些代码来设置 jQuery localScroll 插件,但该代码不起作用。
为了测试它,我在同一个文件中包含了对 console.log() 的调用,只是告诉它写入数字 4。如果我打开 bundle.js,我可以看到 console.log() 调用以及调用到$.localScroll(),他们只是没有运行。从控制台手动调用$.localScroll() 可以正常工作。
这里是有问题的 JS 文件:
console.log(4);
$(() => {
$.localScroll({duration: 800});
});
这是我的 Webpack 配置:
const path = require('path');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
entry: './webpack-entry.js',
plugins: [
new CleanWebpackPlugin(['dist']),
new webpack.optimize.UglifyJsPlugin()
],
output: {
filename: './javascripts/bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.scss$/,
use: [
'style-loader',
'css-loader',
'sass-loader'
]
},
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.(png|svg|jpg|jpeg)$/,
use: {
loader: 'url-loader',
options: {
limit: 8192,
fallback: 'file-loader',
name: './images/[hash].[ext]'
}
}
},
{
test: /\.pug$/,
use: [
{
loader: 'file-loader',
options: {
name(file) {
if(new RegExp(/partials/).test(file)) {
return './views/partials/[name].[ext]'
}
return './views/[name].[ext]'
}
}
},
'pug-asset-loader?root=./src'
],
},
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['env'],
}
},
]
}
],
}
};
最后,这里是bundle.js(我的自定义代码似乎在最底部,在某种函数数组中)。非丑化版本对于 SO 来说太长了,所以这里是 Hastebin:https://hastebin.com/vululimupi.js
【问题讨论】:
-
您的问题可能是您将文件与 console.log 一起用作模块。它不遵循我见过的任何模块规范。您可能需要使用任何formats supported 来定义它。您也可能需要在入口点导出它并从那里调用它。
-
@uKolka 我修改了这个建议,发现无论出于何种原因,将入口文件中的
require.context()更改为特定文件的直接require()可以使其工作。包含我的 JS 文件的捆绑代码部分在我看来并没有什么不同,所以我不确定为什么会这样,但它确实有效。谢谢! -
情况就是这样,就像任何其他依赖 JS 模块化的打包工具一样。
标签: javascript jquery webpack