【发布时间】:2014-05-05 14:58:20
【问题描述】:
我正在创建我的第一个 Bower 组件。运行bower init 后,脚本会询问我“这个包暴露了哪些类型的模块?”使用这些选项:
- amd
- es6
- 全局变量
- 节点
这些选项有什么区别?
【问题讨论】:
标签: node.js bower js-amd ecmascript-6
我正在创建我的第一个 Bower 组件。运行bower init 后,脚本会询问我“这个包暴露了哪些类型的模块?”使用这些选项:
这些选项有什么区别?
【问题讨论】:
标签: node.js bower js-amd ecmascript-6
如果您不知道,那么 globals 很可能是您的正确答案。
无论哪种方式,您都需要了解:
此功能是最近在 bower 中引入的,目前还没有记录 (AFAIK)。它本质上描述了moduleType,它说明了该包打算使用的模块技术(见上文)。
目前,除了在包的bower.json文件中设置moduleType属性外,没有任何作用。
有关原始拉取请求,请参阅 https://github.com/bower/bower/pull/934。
补充几点,回答cmets:
moduleType 属性进行验证 - 这意味着技术上允许人们使用他们想要的任何值,包括 angularjs 如果他们愿意这样做non-interoperable/proprietary moduleTypes(想想作曲家、角度等)——这很容易理解,但再一次,没有什么能真正阻止人们使用他们所使用的moduleType 值想要yui moduleType,因此,假设它们是part of a concerted plan,则存在“例外”
如果我要为未列出的包管理器编写包并将其发布到 bower,我会怎么做?
我会编写一个 es6 模块,并使用 /patch es6-transpiler 来输出我需要的包格式。然后我会/和:
es6作为moduleType
免责声明:我没有编写 angularjs 模块的实际经验。
【讨论】:
angularjs 本身,我可能会使用globals,是的,但请阅读我的更新。希望对您有所帮助。
我也是第一次使用bower init。
这些选项应该是指模块化一些 JavaScript 代码的不同方式:
define,比如 requirejs。require。在我的例子中,我编写了一个 Node.js 模块 dflow,但我使用 browserify 创建了一个导出全局 dflow 的 dist/dflow.js 文件var: 所以我选择了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,我需要camelize flowView 中的全局名称。 p>
这种新方法还有另外两个好处:
${npm_package_name} 变量并编写一次用于浏览器的脚本。这是另一个话题,但是,确实值得您考虑后者的好处:让我分享我在 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') }; });
仅供参考,这正是 bower 指定的模块类型:
mainJavaScript 文件中定义的模块类型。可以是以下字符串之一或数组:
globals:添加到全局命名空间的 JavaScript 模块,使用window.namespace或this.namespace语法amd:与 AMD 兼容的 JavaScript 模块,如 RequireJS,使用define()语法node:JavaScript 模块与 node 和 CommonJS 兼容,使用module.exports语法es6:与ECMAScript 6 modules 兼容的JavaScript 模块,使用export和import语法yui:与YUI Modules 兼容的JavaScript 模块,使用YUI.add()语法
相关链接:https://github.com/bower/spec/blob/master/json.md#moduletype
【讨论】: