【发布时间】:2019-01-21 19:36:57
【问题描述】:
在添加 webpack 之前一切正常。这是我当前的配置(下)。在 login.js 中,有一个 window.onload 函数,然后不久之后有一个 socket.on 函数,它现在正在破坏程序。添加 webpack 后,似乎“socket”对其他文件不全局可用。
这是我在运行我的应用程序时在控制台中收到的错误代码:
“login.js:1 Uncaught TypeError: socket.on is not a function at window.onload (login.js:1)”
任何帮助或见解将不胜感激。
webpack.config
const path = require('path')
module.exports = {
entry: {
scripts: './src/scripts.js',
login: './src/login.js'
},
output: {
path: path.resolve(__dirname, 'public/js'),
filename: '[name].js'
},
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['env']
}
}
}]
},
devServer: {
contentBase: path.resolve(__dirname, 'public'),
publicPath: '/js/'
}
}
index.html 的脚本部分
<script src="./socket.io/socket.io.js"></script>
<script src="./js/scripts.js"></script>
<script src="./js/login.js"></script>
</body>
以前工作得很好,所以我认为这里没有问题:
服务器
const http = require('http').Server(app);
const io = require('socket.io')(http);
客户
scripts.js(不在函数中,全局声明):
const socket = io();
let socketid;
socket.on('connect', () => socketid = socket.io.engine.id);
login.js(window.onload 函数内):
socket.on('check email', () => {
setTimeout(() => refreshPage(), 7500);
popupbox({
titletext: 'Verify email', messagetext: 'A verification link has been sent, please verify your email address within 24 hours.',
okaytext: 'Okay', okayfunction: () => refreshPage(),
customcolor: "#007C5B"
});
});
【问题讨论】:
-
你必须显示你创建socket io客户端实例的相关代码,你
import/require的位置,以及你调用socket.on的位置 -
我不是指服务器端
import/require。我的意思是客户端,你在哪里设置socket变量? -
你真的应该在你的规则中
exclude: /node_modules/吗?我有一个工作的 socket.io-webpack-combo 没有它,你可能只是打包你的前端而没有 socket.io -
这是为了让项目更容易移动和编译更快,因为它们很容易用 npm install 创建,而且不是我要编辑的代码。但我尝试删除该行以查看它是否有效,但我仍然收到错误。
标签: javascript node.js express webpack socket.io