Answers:
如果您不知道,那么全局变量很可能是您的正确答案。
无论哪种方式,您都需要了解:
此功能是在Bower中最近引入的,至今尚未记录(AFAIK)。它从本质上描述了moduleType
,指出了要使用哪种模块技术(请参见上文)。
现在,除了在包文件中设置moduleType
属性外,它没有任何作用bower.json
。
请参阅https://github.com/bower/bower/pull/934了解原始的pull-request。
其他几点,以回答评论:
moduleType
物业进行验证-这意味着技术上允许人们使用他们想要的任何价值,包括angularjs
他们是否愿意这样做non-interoperable/proprietary moduleTypes
(认为作曲家,角,等等) -这是很容易理解的,但再一次,没有什么阻止人们使用moduleType
他们想要的价值yui moduleType
,因此,假设它们是一致计划的一部分,则要进行“例外”如果我为一个未列出的软件包管理器编写一个软件包并将其发布在bower上,该怎么办?
我会编写一个es6模块,并使用/ patch es6-transpiler输出我需要的包格式。然后,我会/或者:
es6
用作moduleType
免责声明:我没有编写angularjs模块的实际经验。
angularjs
本身,我可能会使用globals
,是的,但请阅读我的更新。希望能有所帮助。
我bower init
也是第一次使用。
这些选项应引用模块化某些JavaScript代码的不同方法:
define
,例如requirejs。require
。在我的情况下,我编写了一个Node.js模块dflow,但是我使用browserify创建了一个导出全局dflow var 的dist / dflow.js文件:因此,我选择了globals。
我用来将dflow浏览器化为窗口全局对象的命令是
browserify -s dflow -e index.js -o dist/dflow.js
我更改了它,因为我更喜欢在浏览器中使用require,所以现在我正在使用
browserify -r ./index.js:dflow -o dist/dflow.js
所以我改变了bower.moduleType到节点在我bower.json文件。
其主要动机是,如果我的模块名称有一个破折号,例如我的项目流程视图,我需要camelize在全局名称flowView。
这种新方法还有两个好处:
${npm_package_name}
变量并编写一次用于浏览器的脚本。这是另一个话题,但是,值得考虑一下后一个好处的价值是真的:让我分享npm.scripts.browserify
我在package.json中使用的属性
"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') }; });
仅供参考,这正是Bower针对模块类型指定的内容:
main
JavaScript文件中定义的模块类型。可以是以下字符串之一或数组:
globals
:使用window.namespace
或this.namespace
语法添加到全局名称空间的JavaScript模块amd
:使用语法与AMD兼容的JavaScript模块(例如RequireJS)define()
node
:使用语法与node和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