javascript - 如何强制 webpack 使用“浏览器”方法加载库?
问题描述
我正在尝试将使用 bower 和 usemin 的遗留项目迁移到 webpack 4。第一步,我只想创建所有 JavaScript 代码的包。为此,我创建了index.js
以这种形式放置所有脚本的位置
window.moment = require('./bower_components/moment/moment.js');
require('imports-loader?define=>false,this=>window!' +
'./bower_components/moment-timezone/builds/moment-timezone-with-data-2010-2020.js');
我为遗留库使用导入和导出加载器。我的问题是一些库试图像这样加载/导入依赖项
(function (root, factory) {
"use strict";
/*global define*/
if (typeof define === 'function' && define.amd) {
define(['moment'], factory); // AMD
} else if (typeof exports === 'object') {
module.exports = factory(require('moment')); // Node
} else {
factory(root.moment); // Browser
}
}(this, function (moment) {
...
}
当 webpack 尝试加载此类库时,第二个 if 子句给出true
,webpack 尝试加载依赖 usingrequire()
语句。
使用imports-loader?define=>false
我可以强制库不要尝试 AMD 方法。但我不知道如何跳过使用require()
. 我尝试使用 imports-loader?define=>false,exports=>false
,但它不起作用。
是否可以禁用节点方法?例如将导出设置为false
.
我还尝试resolve.alias: {'libname', 'path/to/lib'}
在 webpack 配置中使用选项。但是这种方式在某些情况下会导致 webpack 尝试导入依赖项两次或更多次并破坏代码的情况。
解决方案
您必须设置exports
为false
:
require('imports-loader?define=>false,exports=>false,this=>window!' +
'./bower_components/moment-timezone/builds/moment-timezone-with-data-2010-2020.js');
这应该使typeof exports === 'object'
条件为假。
推荐阅读
- python - 任务未从 Flask 到达 Celery,但仅在从 Flask 应用程序路由调用时
- python - 为什么我在 pip install bert 后无法在 bert 中导入函数
- html - 为什么不能在元素中放置内容?
- javascript - 将两个计算属性合二为一
- android - FCM 服务器对用户的限制以及如何处理
- flutter - 创建示例颤振插件以导入 AndroidX 并获取错误无法解析符号 'XXX'
- jenkins - Jenkins 作业多次触发 git push
- python - 如何计算和显示 Django 应用程序/类中的销售价值?
- amazon-s3 - 从深层 S3 路径层次结构中的 CSV 读取 Dask DataFrame
- api-platform.com - 如何在 API Platform Admin 中隐藏列?