我在 webpack 中创建了一个名为 gar 的库,因此我可以访问 javascript 代码,但是当我在开发的 webpack 中运行 webpack-dev-server 时,它告诉我 gar.handleSubmit 不是一个函数。 但它在生产的 webpack 中正常工作
index.js
import { checkForName } from './js/nameChecker'
import { handleSubmit } from './js/formHandler'
import './styles/resets.scss'
import './styles/base.scss'
import './styles/footer.scss'
import './styles/form.scss'
import './styles/header.scss'
export {
checkForName,
handleSubmit
}
formHandler.js
export function handleSubmit(event) {
event.preventDefault()
// check what text was put into the form field
let formText = document.getElementById('name').value
gar.checkForName(formText)
console.log("::: Form Submitted :::")
fetch('http://localhost:8081/test')
.then(res => res.json())
.then(function(res) {
document.getElementById('results').innerHTML = res.message
})
}
nameChecker.js
export function checkForName(inputText) {
console.log("::: Running checkForName :::", inputText);
let names = [
"Picard",
"Janeway",
"Kirk",
"Archer",
"Georgiou"
]
if(names.includes(inputText)) {
alert("Welcome, Captain!")
}
}
index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<header>
<div class="">
Logo
</div>
<div class="">
navigation
</div>
</header>
<main>
<section>
<form class="" onsubmit="return gar.handleSubmit(event)">
<input id="name" type="text" name="input" value="" placeholder="Name">
<input type="submit" name="" value="submit" onclick="return gar.handleSubmit(event)" onsubmit="return gar.handleSubmit(event)">
</form>
</section>
<section>
<strong>Form Results:</strong>
<div id="results"></div>
</section>
</main>
<footer>
<p>This is a footer</p>
</footer>
</body>
</html>
webpack.dev.js
const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
mode: 'development',
devtool: 'source-map',
entry:'./src/client/index.js',
output: {
libraryTarget: 'var',
library: 'gar'
},
module: {
rules: [
{
test: '/\.js$/',
exclude: /node_modules/,
loader: 'babel-loader'
},
{
test: /\.scss$/,
use: [ 'style-loader', 'css-loader', 'sass-loader' ]
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/client/views/index.html',
filename: './index.html'
}),
new CleanWebpackPlugin({
// Simulate the removal of files
dry: true,
// Write Logs to Console
verbose: true,
// Automatically remove all unused webpack assets on rebuild
cleanStaleWebpackAssets: true,
protectWebpackAssets: false
})
]
}
package.json
{
"name": "example-project",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node src/server/index.js",
"build-prod": "webpack --config webpack.prod.js",
"build-dev": "webpack serve --config webpack.dev.js --open"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"express": "^4.17.1",
"html-webpack-plugin": "^5.3.2",
"webpack": "^5.47.0",
"webpack-cli": "^4.7.2"
},
"devDependencies": {
"@babel/core": "^7.14.8",
"@babel/preset-env": "^7.14.8",
"babel-loader": "^8.2.2",
"clean-webpack-plugin": "^4.0.0-alpha.0",
"css-loader": "^3.6.0",
"node-sass": "^4.14.1",
"sass-loader": "^7.3.1",
"style-loader": "^0.23.1",
"webpack-dev-server": "^3.11.2"
}
}