我正在创建我的第一个Bower组件。运行bower init
脚本后,问我“此软件包公开了哪些模块类型?” 这些选项:
- d
- es6
- 全球
- 节点
这些选项之间有什么区别?
我正在创建我的第一个Bower组件。运行bower init
脚本后,问我“此软件包公开了哪些模块类型?” 这些选项:
这些选项之间有什么区别?
仅供参考,这正是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
初始
我
bower init
也是第一次使用。这些选项应参考模块化JavaScript代码的不同方法:
define
,例如requirejs。require
。就我而言,我编写了一个Node.js模块dflow,但是我使用browserify创建了一个dist / dflow.js文件,该文件导出了一个全局dflow var:所以我选择了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"