问题标签 [umd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
webpack - 使用 webpack 从动态源输出 UMD 模块
我有一个项目结构,其中包含一个文件夹,我想在构建 webpack 配置时动态导入到 UMD 模块中,并使每个文件成为输出构建中的子模块。
例如,假设我的来源看起来像:
我希望 webpack 将这些源构建到一个模块中,这样我就可以将每个源都作为子模块来访问,就像这样;
我尝试遍历片段目录并使用文件名和路径创建一个对象,但我无法弄清楚哪个配置属性将指示 webpack 将它们捆绑到一个文件中并导出每个文件。这是我到目前为止所拥有的:
这会出错:Conflict: Multiple assets emit to the same filename ./lib/snippets.js
关于如何完成我正在寻找的任何想法?
javascript - 是否可以在不使用 CDK 的情况下使用 Angular Material?
我正在尝试使用UMD模块定义文件在ES5中使用Material the old school。
一切正常,直到我决定升级到版本 5。现在它说它找不到bidi
undefined 并且当我调查这个问题时,我意识到这是因为新的CDK
或Component Development Kit。
现在我在一个地方找不到包含其所有部分的软件包 CDK UMD 文件,我真的不想将所有这些 a11y、i18n、bidi 等一一包括在内。
问题是,我查看 CDK 文件的次数越多,我就越意识到我什至可能根本不想要它们。没有他们我会很好。
有没有办法不加载它们并仍然使用材料?
javascript - 如何使用 Babel 将 jQuery 的 ECMA6 导入转换为 UMD 包装器?
我正在尝试使用 Babel 将 jQuery 的 ECMA6 导入转换为 UMD 包装器。
我的 ECMA6 来源如下所示:
和 Babel 将其转换为:
此代码在 Node.js 环境中运行良好,因为require('jquery')
从node_modules
.
但是,在浏览器环境中global.jquery
(相当于window.jquery
)没有定义 - jquery 将自身导入为$
or jQuery
,而不是作为jquery
.
是否有任何 Babel 设置可以解决此问题?
我现在的.babelrc
typescript - 在 Typescript 项目中将 umd 全局变量与模块一起使用
我正在尝试让 Leaflet 库与我的 Typescript 项目配合得很好。
我的项目遵循 commonJs 模式(我的源文件中的导入\导出),但是当我使用 webpack 构建时,编译器从我的文件中给我以下错误,我尝试访问L
传单模块公开的全局
'L' 指的是一个 UMD 全局,但当前文件是一个模块。考虑改为添加导入。
现在,如果我将传单导入到我的源文件中,我可以解决这个问题,如下所示:
但是我想知道是否可以在我的所有文件中全局访问 t 而不必在每个文件中导入。
我进行了一番挖掘,发现了一些解决方法,您可以像这样声明自己的全局变量:
全局.d.ts
我不确定这是否被推荐,感觉有点脏,webpack 配置是否有适当的方法来为 commonJs 项目提供 UMD 模块公开的全局变量,还是我在胡说八道?我承认我在试图理解模块类型及其可互换性之间的差异时感到困惑,所以放轻松!
javascript - Webpack 4 通用库目标
根据Webpack 4 文档,如果我指定libraryTarget: 'umd'它应该会产生以下输出:
但是,我得到的是:
更准确地说,
(typeof self !== 'undefined' ? self : this, function()
我得到的不是这个:
(window, function()
这(显然)window is undefined
在节点环境中导入时会导致运行时错误。
需要明确的是:
我知道window
节点应用程序中不存在。我的问题不是关于这个,而是关于webpack。
这是一个错误还是我错过了什么?
我的输出配置:
angular - Angular 5 - 将组件的名称实例化为字符串
我知道如何使用ComponentFactoryResolver.resolveComponentFactory(AComponentType)
但是该方法需要 a Type
,而在我的代码中,我将类型的名称命名为 a string
。
在 Angular API 中是否有解决方法string
?如果没有,如何将字符串转换为Type
TypeScript 中的 a?
如果以上都不可能,我将求助于地图,但这并不是那么简单,因为我需要实例化的组件将来自远程获取的 UMD 角度组件库。
javascript - 避免覆盖 UMD 脚本
我们有一个使用 webpack UMD 配置打包的库:
如果客户两次包含 js,它会产生很多错误,可能是由于引用问题。如何检查库是否已经包含在内,在这种情况下我不会再次替换全局变量?
javascript - 如何在 Vue 组件中保存对“this”的引用?
我不确定我是否正确执行此操作。请看一下这个简单的 Vue 组件Test.vue
:
如您所见,我将 this 的引用保存到一个名为的变量中,self
因为 lambda 函数的值发生了this
变化,例如ajax().then((obj) => self.name = obj.data);
我的问题是,当创建另一个组件实例时,它会覆盖self
前一个实例中的值。因此,例如,如果我有两个<test id="1"></test>
, <test id="2"></test>
然后后面的组件覆盖self
第一个的变量(同样发生v-for
)。
所以我的问题是如何创建self
保存到this
每个实例的值并且不会被覆盖的变量?
编辑:是的,我知道我可以self = this
在每个函数中做,但这只是一个简单的例子,只有一种方法。在我的实际组件中,我不想self = this
在每个函数中都执行 20 多个函数。这就是为什么我可以创建一个变量,我可以在create
调用期间分配一次并在任何地方使用它(就像我们过去使用that
变量一样)。
javascript - UMD 全局变量的 TypeScript 模块类型?
我的 TypeScript 项目是为带有AMD模块的浏览器编译的。我包括lodash.min.js
我自己,还有一堆其他的UMD库,它们都声明了全局变量,比如moment
和_
. 我需要告诉我的 TypeScript _
Lodash 的全局变量。我怎么能用进口做到这一点?如果我安装@types/lodash
并使用import * as _ from "lodash";
,它会尝试在运行时动态获取 AMD Lodash 模块,这会破坏一切。
如果我有一个声明_
全局的文件,即export declare const _: LodashStatic;
,我什至无法将我的声明导入另一个文件,或者它会尝试在运行时加载内容。declare
如果 TypeScript 将其视为功能导入,那么关键字的意义何在。我认为声明只是告诉编译器关闭,并且在运行时会有单独加载的东西。对我来说幸运的是,我可以declare const _: LodashStatic;
在数百个文件中的每一个文件中使用,并且一切正常,但如果我可以只声明一次然后导入其他文件,那就太好了......
angular - Webpack 将 [name] 用于具有多个入口点的 output.library
我正在尝试从我的入口点输出两个库,但我似乎无法将 [name] 用于 output.library,就像 output.filename 一样。我还尝试将它放入每个 webpack 文档的数组中(https://github.com/webpack/webpack/tree/master/examples/multi-part-library#webpackconfigjs)library: ['[name]'],
:。
使用上面的配置,我的文件在我的编辑器中显示在 dist 下,但不在浏览器中,并且从 root 中丢失。如何正确设置此配置以输出不同名称的多个库?