gpt4 book ai didi

javascript - Webpack 不会从 node_modules 导入包(仅限 js)

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:44 26 4
gpt4 key购买 nike

早上好,

我对 Webpack 还很陌生,感觉有点迷失——从源路径导入模块工作得很好——但是从 node_modules(例如 jQuery)导入模块会给我错误消息,表明找不到该模块。我完全迷失了,甚至不知道要寻找什么或如何进一步调试。

我收到的错误消息是:

external "jquery":1 Uncaught ReferenceError: jquery is not defined
at Object.jquery (external "jquery":1)
at __webpack_require__ (bootstrap:723)
at fn (bootstrap:100)
at Object../js/ManagementApplication.ts (ManagementApplication.ts:5)
at __webpack_require__ (bootstrap:723)
at fn (bootstrap:100)
at Object.0 (dist.js:40457)
at __webpack_require__ (bootstrap:723)
at bootstrap:790
at bootstrap:790
jquery @ external "jquery":1
__webpack_require__ @ bootstrap:723
fn @ bootstrap:100
./js/ManagementApplication.ts @ ManagementApplication.ts:5
__webpack_require__ @ bootstrap:723
fn @ bootstrap:100
0 @ dist.js:40457
__webpack_require__ @ bootstrap:723
(anonymous) @ bootstrap:790
(anonymous) @ bootstrap:790

这是我的 webpack 配置:

// shared config (dev and prod)
const {resolve} = require('path');
const {CheckerPlugin} = require('awesome-typescript-loader');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require("webpack")


module.exports = {
resolve: {
extensions: ['.ts', '.js'],
},
context: resolve(__dirname, '../src/main/'),
output: {
filename: "dist.js",
path: resolve(__dirname, '../target')
},
externals: {
bootstrap: "bootstrap",
jquery: "jquery"
},
module: {
rules: [
{
test: /\.js$/,
use: ['babel-loader'],
},
{
test: /\.tsx?$/,
use: ['babel-loader', 'awesome-typescript-loader'],
},
{
test: /\.css$/,
use: ['style-loader', {loader: 'css-loader', options: {importLoaders: 1}}],
},
{
test: /\.(scss)$/,
use: [{
loader: 'style-loader', // inject CSS to page
}, {
loader: 'css-loader', // translates CSS into CommonJS modules
}, {
loader: 'postcss-loader', // Run postcss actions
options: {
plugins: function () { // postcss plugins, can be exported to postcss.config.js
return [
require('autoprefixer')
];
}
}
}, {
loader: 'sass-loader' // compiles Sass to CSS
}]
},

{
test: /\.woff2?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: 'url-loader?limit=10000',
},
{
test: /\.hbs/,
loaders: "handlebars-loader"
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
loaders: [
'file-loader?hash=sha512&digest=hex&name=img/[hash].[ext]',
'image-webpack-loader?bypassOnDebug&optipng.optimizationLevel=7&gifsicle.interlaced=false',
],
},
],
},
plugins: [
new CheckerPlugin(),
new HtmlWebpackPlugin(),
new webpack.IgnorePlugin(/\/iconv-loader$/)
],
performance: {
hints: false,
},
};

还有这个:

// development config
const merge = require('webpack-merge');
const webpack = require('webpack');
const commonConfig = require('./common');

module.exports = merge(commonConfig, {
mode: 'development',
entry: [
'webpack-dev-server/client?http://localhost:4000',// bundle the client for webpack-dev-server and connect to the provided endpoint
'webpack/hot/only-dev-server', // bundle the client for hot reloading, only- means to only hot reload for successful updates
'./js/ManagementApplication.ts' // the entry point of our app
],

devServer: {
hot: true,
host: "0.0.0.0",
port: "4000"

},
devtool: 'source-map',
plugins: [
new webpack.HotModuleReplacementPlugin(), // enable HMR globally
new webpack.NamedModulesPlugin(), // prints more readable module names in the browser console on HMR updates
],
});

(两者都已加载,后一个覆盖第一个)。

我已经检查了十亿次,这些库在node_modules内是否正确 - 只是不知道为什么它们没有加载。这个问题不仅针对特定图书馆,而且针对所有图书馆。

相比之下,从库导入 css 资源效果很好。

有谁知道如何解决这个问题或者可以帮助我了解发生了什么?

最佳答案

如果您希望将 jquery 视为外部,@Pandelis 答案是正确的(请注意大写的 Q:jquery: jQuery)。但如果您想将 jquery 作为 Node 模块导入,请参见下文。

使用 jQuery 作为 Node 模块

如果您想使用 jQuery 作为 Node 模块并将其捆绑,您应该从 npm 安装 jquery

npm install jquery

然后将其导入到您的代码中

import $ from "jquery";

无需向 webpack.config.js 添加任何内容。但如果你想使用 jQuery 作为外部:

使用 jQuery 作为外部

当您在 webpack.config.js 中执行类似操作时:

...
module.exports = {
externals: {
jquery: "jQuery" // or jquery: "$"
},
...
}

它告诉 webpack 在 import jquery 行中,jquery 不应该被捆绑;相反,在全局范围内查找 jQuery 对象(在我们的例子中是 window)。 jQuery$ 都有效。这也意味着您必须从外部源加载 jquery:

#index.html

<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<sript src="bundle.js"></script>

然后在您的代码中,您可以执行以下操作

import 'jquery' // or import $ from 'jquery'
$...

只是为了说明,您还可以执行 externals: { foo: 'jQuery' }import 'foo' 仍然有效。

希望对你有帮助!

关于javascript - Webpack 不会从 node_modules 导入包(仅限 js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54324055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com