[英]Webpack bundled JS not being executed
這是一個非常奇怪的問題,因為實際上,一些捆綁的代碼正在執行。 我為我的 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
問題是您尚未將此依賴項定義為模塊。 按照支持的模塊格式規范重寫它應該會有所幫助。
經過一些測試,似乎根本問題就像@uKolka 所說的那樣——我的文件沒有被要求作為模塊。 雖然我還沒有完全確定為什么他們的代碼仍然出現在我的包文件,但不運行,我已經找到一種方法來獲得仍的遞歸好處require.context()
似乎require.context()
返回一個函數,該函數本身能夠解析它在您指向的任何文件夾中記錄的文件。 它還有一個成員函數keys()
,它非常方便地返回每個相關文件名,並且很容易與forEach()
一起forEach()
。
鑒於所有這些,這就是我的webpack-entry.js
現在的樣子:
import './src/stylesheets/scss/master.scss';
require.context('./src/views', true, /\.pug$/);
const js = require.context('./src/javascripts/', false, /\.js$/);
js.keys().forEach(key => js(key));
這工作得很好。
就我而言,這是由於 Babel 和 React。 如果你使用 React,那么嘗試直接調用./src/index.js
並在你的 .babelrc 中使用"@babel/preset-env", "@babel/preset-react"
。 你可以看看我的要點。 在你的 webpack.config.js 中:
{
test: /\.js?$/,
use: ["babel-loader"],
exclude: /node_modules/
},
看看要點: https : //gist.github.com/Nagibaba/14e898d99a4be89b00a60d28abc19bc0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.