ฉันกำลังสร้างองค์ประกอบ Bower แรกของฉัน หลังจากเรียกใช้bower init
สคริปต์ถามฉันว่า 'แพคเกจนี้เปิดเผยโมดูลประเภทใด?' ด้วยตัวเลือกเหล่านี้:
- เอเอ็มดี
- ES6
- Globals
- ปม
ความแตกต่างระหว่างตัวเลือกเหล่านี้คืออะไร?
ฉันกำลังสร้างองค์ประกอบ Bower แรกของฉัน หลังจากเรียกใช้bower init
สคริปต์ถามฉันว่า 'แพคเกจนี้เปิดเผยโมดูลประเภทใด?' ด้วยตัวเลือกเหล่านี้:
ความแตกต่างระหว่างตัวเลือกเหล่านี้คืออะไร?
คำตอบ:
หากคุณไม่รู้ก็เป็นไปได้ว่าคำตอบที่ถูกต้องสำหรับคุณ
ไม่ว่าจะด้วยวิธีใดคุณต้องเข้าใจ:
ฟีเจอร์นี้เปิดตัวเมื่อไม่นานมานี้และไม่ได้รับการบันทึก (AFAIK) มันอธิบายหลักmoduleType
ซึ่งระบุถึงสิ่งที่เทคโนโลยีโมดูลแพคเกจจะหมายถึงการบริโภค (ดูด้านบน)
ตอนนี้มันไม่มีผลใด ๆ นอกเหนือจากการตั้งค่าmoduleType
คุณสมบัติในbower.json
ไฟล์ของแพ็คเกจ
ดูhttps://github.com/bower/bower/pull/934สำหรับคำขอดึงแบบดั้งเดิม
จุดเพิ่มเติมเล็กน้อยเพื่อตอบความคิดเห็น:
moduleType
คุณสมบัติ - ซึ่งหมายความว่าผู้คนได้รับอนุญาตทางเทคนิคให้ใช้สิ่งที่พวกเขาต้องการตามตัวอักษรรวมถึงangularjs
หากพวกเขารู้สึกอยากจะทำเช่นนั้นnon-interoperable/proprietary moduleTypes
(คิดว่านักแต่งเพลงเชิงมุม ฯลฯ ) - ซึ่งเป็นที่เข้าใจได้อย่างง่ายดายอีกครั้ง แต่ยังไม่มีอะไรจริงๆป้องกันไม่ให้คนจากการใช้moduleType
ค่าที่พวกเขาต้องการyui moduleType
ดังนั้นจึงมี "ข้อยกเว้น" ที่จะทำสมมติว่าพวกเขาเป็นส่วนหนึ่งของแผนร่วมกันฉันจะทำอย่างไรถ้าฉันจะเขียนแพ็คเกจสำหรับผู้จัดการแพ็คเกจที่ไม่อยู่ในรายการและเผยแพร่บน bower?
ฉันจะเขียนโมดูล es6 และใช้ / patch es6-transpilerเพื่อแสดงผลรูปแบบแพ็คเกจที่ฉันต้องการ จากนั้นฉันก็จะ / และ:
es6
เป็นmoduleType
ข้อจำกัดความรับผิดชอบ: ฉันไม่มีประสบการณ์ในชีวิตจริงที่เขียนโมดูลเชิงมุม
angularjs
ในตัวเองฉันอาจใช้globals
ใช่ แต่อ่านอัปเดตของฉัน หวังว่าจะช่วย
ฉันใช้bower init
เป็นครั้งแรกด้วย
ตัวเลือกควรอ้างอิงถึงวิธีต่างๆในการทำให้เป็นมาตรฐานรหัส JavaScript:
define
เช่น likejrequire
Node.jsในกรณีของฉันฉันเขียนโมดูล Node.js dflowแต่ฉันใช้ browserify เพื่อสร้างอ / dflow.jsไฟล์ว่าการส่งออกทั่วโลกdflow var: ดังนั้นผมจึงเลือกGlobals
คำสั่งที่ฉันใช้เพื่อทำให้เบราว์เซอร์ dflowเป็นวัตถุโกลบอลของหน้าต่าง
browserify -s dflow -e index.js -o dist/dflow.js
ฉันเปลี่ยนมันทำให้ฉันชอบที่จะใช้ต้องมีภายในเบราว์เซอร์ดังนั้นตอนนี้ฉันกำลังใช้
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
: โมดูล JavaScript ที่เพิ่มในเนมสเปซส่วนกลาง, การใช้window.namespace
หรือthis.namespace
ไวยากรณ์amd
: โมดูล JavaScript ที่เข้ากันได้กับ AMD เช่นRequireJSโดยใช้define()
ไวยากรณ์node
: โมดูล JavaScript เข้ากันได้กับโหนดและCommonJSโดยใช้module.exports
ไวยากรณ์es6
: โมดูล JavaScript ใช้งานร่วมกับโมดูล ECMAScript 6 , การใช้export
และimport
ไวยากรณ์yui
: โมดูล JavaScript ใช้งานร่วมกับโมดูล YUIได้โดยใช้YUI.add()
ไวยากรณ์
ลิงค์ที่เกี่ยวข้อง: https://github.com/bower/spec/blob/master/json.md#moduletype