Django 如何使用从NPM导入的javascript库 上下文
很长一段时间以来,我一直在使用Bootstrap和其他源代码库。我的意思是我把它包括在下面:Django 如何使用从NPM导入的javascript库 上下文,django,twitter-bootstrap,npm,webpack,bundle,Django,Twitter Bootstrap,Npm,Webpack,Bundle,很长一段时间以来,我一直在使用Bootstrap和其他源代码库。我的意思是我把它包括在下面: - static - vendor - jquery - popper - bootstrap - ... 但是现在,我需要在管理我的web依赖性方面提高自己。出于某些原因: 存储库中的资源更少,团队项目效率更高 更好地支持选择版本或测试迁移 为具有相同依赖项的后续项目节省时间 我需要包括一个图书馆,这是只通过NPM提供的,这是 因此,
- static
- vendor
- jquery
- popper
- bootstrap
- ...
但是现在,我需要在管理我的web依赖性方面提高自己。出于某些原因:
- 存储库中的资源更少,团队项目效率更高
- 更好地支持选择版本或测试迁移
- 为具有相同依赖项的后续项目节省时间
- 我需要包括一个图书馆,这是只通过NPM提供的,这是
npm安装后在哪里继续
——保存jquery popper.js引导程序。我被node.js应用程序的所有示例所困扰
我被困的地方
我有一个index.js
,与我的主package.json
处于同一级别。我想我必须在这个文件中导入我的脚本,然后在我的页面中包含这个脚本。因此,我尝试先要求Jquery,然后再要求引导,但我在要求引导时出错,因为Jquery
未定义。我没有太多的代码要显示,我更需要的是一步一步地理解它是如何工作的,而不是让它完成给我
问题 我的主要目标是管理我的主要Java脚本,我的意思是必须在整个站点中显示的脚本。将它们包装成一个脚本,然后将该脚本包含在我的
base.html
中,假设我在django项目中
npm安装jquery popper.js
它们?即使在运行npm之后,也要在node\u模块/bootstrap中安装?另外,bootstrap.bundle.js
包含popper.js,bootstrap中的node_模块包含jquery为什么不使用它们?请参见否则,它们为什么在那里
bootstrap/dist/js/bootstrap.bundle.js
从bootstrap/node\u modules/Jquery/dist/Jquery.js
执行Jquery?然后我将拥有与引导开发人员使用的相同版本collectstatic
函数将这些脚本放入文件夹,在那里我将所有需要的静态数据分组网志
随着我的进步 package.json webpack-conf.js index.js npm运行构建 结果 目前,我设法将此捆绑包包含到我的站点中,但出现了一个错误,它似乎不包括Jquery:
ReferenceError:$未定义
。值得注意的是,它出现在这个代码段上,例如:
$(function () {
$('[data-toggle="popover"]').popover()
$('[data-toggle="tooltip"]').tooltip()
})
有什么想法吗?回答问题1,假设您已经运行了
npm install bootstrap
,并且可以在node_modules文件夹中找到“popper”和“jquery”:
- 添加
导入“引导”代码>在index.js()中
npm install@popperjs/core
&npm install jquery
import$代码>&从'@popperjs/core'导入{}代码>在index.js中
我找到了一个很好的解决办法 webpack-conf.js index.js
然后导入这个脚本就可以了。多亏了@karanver,我的头脑才清醒过来,让我走上了正确的道路。如果这对你有帮助,一定要告诉我!(我认为您从'bootstrap'导入$时出错;应该是从'jquery'导入的
,
对吧?正如我在bootstrap文档中看到的那样,我确实尝试了导入'bootstrap
。)但是,我尝试通过节点索引.js运行此脚本,并导致了一个错误。如果我错了,请纠正我的错误,这是我不应该尝试运行脚本的地方?让我们再看一次,1.你是对的,它应该是从'jquery'导入$
,我已经对输入错误进行了编辑:)2。您仍然需要在app.js而不是webpack.conf.js中导入“脚本”。一个很好的参考是我们如何在react web应用程序上导入引导。尝试以类似的方式应用于代码库。参考资料(附:这些是指react引导包):嗯,我分析了你的链接,然后我去了网页包文档,最后我找到了如何捆绑的方法。但是,我得到的$没有定义
,看起来Jquery没有正确导入。我不知道我遗漏了什么(我将用代码编辑我的答案),我很高兴它成功了!谢谢你提到我,我也学到了一些新东西!另外,如果你认为我们的谈话帮助你找到了解决办法,请随意给我的答案投赞成票,这对我也有帮助:D
var path = require('path');
var webpack = require('webpack');
module.exports = {
entry: './index.js',
output: { path: __dirname, filename: 'dist/bootstrap-bundle.js' }
};
import $ from 'jquery';
import {} from 'popper.js';
import 'bootstrap'
> npx webpack -c webpack-conf.js
[webpack-cli] Compilation finished
asset dist/bootstrap-bundle.js 169 KiB [emitted] [minimized] (name: main) 1 related asset
runtime modules 1.13 KiB 5 modules
cacheable modules 508 KiB
./index.js 71 bytes [built] [code generated]
./node_modules/jquery/dist/jquery.js 281 KiB [built] [code generated]
./node_modules/bootstrap/dist/js/bootstrap.js 140 KiB [built] [code generated]
./node_modules/popper.js/dist/esm/popper.js 86.4 KiB [built] [code generated]
webpack 5.6.0 compiled successfully in 4541 ms
$(function () {
$('[data-toggle="popover"]').popover()
$('[data-toggle="tooltip"]').tooltip()
})
var path = require('path');
var webpack = require('webpack');
module.exports = {
entry: './index.js',
output: {path: __dirname, filename: 'dist/bootstrap-bundle.js'},
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
]
};
import $ from 'jquery';
window.jQuery = $;
window.$ = $;
import {} from 'popper.js';
import 'bootstrap'