- amd
- es6
- globals
- node
如果你不知道,很可能全局变量是正确答案。
无论如何,你需要理解:
该功能是最近在Bower中引入的,并且尚未被记录(据我所知)。它基本上描述了moduleType
,该属性表示用于消耗包的模块技术(请参见上文)。
现在,它除了设置软件包的bower.json
文件中的moduleType
属性之外没有任何影响。
有关原始拉请求,请参见https://github.com/bower/bower/pull/934。
为了回答评论中的一些问题,这里还有一些补充说明:
moduleType
属性执行验证-这意味着技术上允许人们使用他们想要的任何值,包括angularjs
非互操作/专有moduleTypes
(考虑composer,angular等)-这很容易理解,但仍然没有什么阻止人们使用他们想要的moduleType
值yui moduleType
,因此,需要做出“例外”,假设它们是计划的一部分假如我想为未列出的软件包管理器创建一个软件包并在Bower上发布,该怎么办?
我会编写一个es6模块,并使用/修补es6-transpiler来输出我所需的软件包格式。然后,我会:
es6
用作moduleType
免责声明:我没有编写angularjs模块的实际经验。
我第一次使用 bower init
。
这些选项指的是将某些JavaScript代码模块化的不同方式:
define
,例如requirejs。require
。在我的情况下,我编写了一个Node.js模块dflow,但我使用browserify创建一个导出全局变量dflow的dist/dflow.js文件,因此我选择了globals。
我用于将dflow作为window全局对象浏览器化的命令是
browserify -s dflow -e index.js -o dist/dflow.js
我更改了它,因为我更喜欢在浏览器中也使用require,所以现在我正在使用
browserify -r ./index.js:dflow -o dist/dflow.js
因此我在我的bower.json文件中将bower.moduleType更改为node。
主要原因是如果我的模块名称带有破折号,例如我的项目flow-view,我需要将全局名称flowView设为驼峰命名方式。
这种新方法有另外两个好处:
${npm_package_name}
变量,并编写一次我用于browserify的脚本。这是另一个话题,但是,你应该考虑一下后面那个好处的有用性:让我分享我在package.json中使用的npm.scripts.browserify
属性
"browserify": "browserify -r ./index.js:${npm_package_name} -o dist/${npm_package_name}.js"
define(function(require, exports, module) {
"use strict";
module.exports = {
Collection: require("./collection"),
View: require('./view')
};
});
- Doron Segal仅供参考,这是Bower关于模块类型的具体规定:
main
JavaScript文件中定义的模块类型。可以是以下字符串之一或数组:
globals
:JavaScript模块,使用window.namespace
或this.namespace
语法将内容添加到全局命名空间中amd
:与AMD兼容的JavaScript模块,如RequireJS,使用define()
语法node
:与Node.js和CommonJS兼容的JavaScript模块,使用module.exports
语法es6
:与ECMAScript 6模块兼容的JavaScript模块,使用export
和import
语法yui
:与YUI模块兼容的JavaScript模块,使用YUI.add()
语法
相关链接:https://github.com/bower/spec/blob/master/json.md#moduletype
angularjs
本身,我可能会使用globals
,但请阅读我的更新。希望这可以帮助到你。 - Mangled Deutz