คอมไพเลอร์ปิดเป็นเครื่องมือในการดาวน์โหลด JavaScript และเรียกใช้เร็วขึ้น มันเป็นคอมไพเลอร์ที่แท้จริงสำหรับ JavaScript แทนที่จะรวบรวมจากภาษาต้นทางไปยังรหัสเครื่องมันจะรวบรวมจาก JavaScript ไปยัง JavaScript ที่ดีขึ้น มันแยกวิเคราะห์จาวาสคริปต์ของคุณวิเคราะห์ลบรหัสที่ตายแล้วและเขียนใหม่และลดสิ่งที่เหลืออยู่ นอกจากนี้ยังตรวจสอบไวยากรณ์การอ้างอิงตัวแปรและประเภทและเตือนเกี่ยวกับข้อผิดพลาดของจาวาสคริปต์ทั่วไป
โหมดการรวบรวมอื่น ๆ นอกเหนือจาก ADVANCED
มักจะเป็นในภายหลังและเราได้เลิกใช้โหมดเหล่านั้น เราเชื่อว่าเครื่องมืออื่น ๆ ทำงานได้ดีสำหรับโหมดที่ไม่ใช่ ADVANCED
และรวมเข้ากับระบบนิเวศ JS ที่กว้างขึ้น
คอมไพเลอร์ปิดไม่เหมาะสำหรับจาวาสคริปต์โดยพลการ สำหรับโหมด ADVANCED
ในการสร้าง JavaScript ที่ใช้งานได้รหัสอินพุต JS จะต้องเขียนโดยคำนึงถึงการปิดคอมไพเลอร์
คอมไพเลอร์ปิดเป็นเครื่องมือเพิ่มประสิทธิภาพ "ทั้งโลก" คาดว่าจะเห็นโดยตรงหรืออย่างน้อยก็รับข้อมูลเกี่ยวกับการใช้งานที่เป็นไปได้ของตัวแปรทั่วโลกหรือส่งออกทุกครั้งและชื่อคุณสมบัติทุกอย่าง
มันจะลบและเปลี่ยนชื่อตัวแปรและคุณสมบัติอย่างจริงจังเพื่อให้รหัสเอาต์พุตมีขนาดเล็กที่สุดเท่าที่จะทำได้ สิ่งนี้จะส่งผลให้เกิดเอาท์พุท js หากใช้ตัวแปรหรือคุณสมบัติส่วนกลางถูกซ่อนไว้
แม้ว่าจะสามารถเขียนไฟล์ภายนอกที่กำหนดเองเพื่อบอกให้คอมไพเลอร์ทิ้งชื่อบางชื่อไว้ไม่เปลี่ยนแปลงเพื่อให้พวกเขาสามารถเข้าถึงได้อย่างปลอดภัยด้วยรหัสที่ไม่ได้เป็นส่วนหนึ่งของการรวบรวม แต่มักจะน่าเบื่อที่จะรักษา
การปิดการเปลี่ยนชื่อคุณสมบัติคอมไพเลอร์จะต้องให้คุณเข้าถึงคุณสมบัติอย่างสม่ำเสมอด้วย obj[p]
หรือ obj.propName
แต่ไม่ใช่ทั้งสองอย่าง
เมื่อคุณเข้าถึงคุณสมบัติด้วยวงเล็บเหลี่ยม (เช่น obj[p]
) หรือใช้วิธีการทางอ้อมอื่น ๆ เช่น let {p} = obj;
สิ่งนี้ซ่อนชื่อตัวอักษรของทรัพย์สินที่อ้างอิงจากคอมไพเลอร์ ไม่สามารถรู้ได้ว่า obj.propName
หมายถึงคุณสมบัติเดียวกันกับ obj[p]
ในบางกรณีมันจะสังเกตเห็นปัญหานี้และหยุดการรวบรวมด้วยข้อผิดพลาด ในกรณีอื่น ๆ มันจะเปลี่ยน propName
เป็นสิ่งที่สั้นกว่าโดยไม่สังเกตเห็นปัญหานี้ส่งผลให้รหัสเอาต์พุต js แตก
การปิดคอมไพเลอร์อย่างจริงจังมีตัวแปรทั่วโลกและโซ่แบนของชื่อทรัพย์สินบนตัวแปรทั่วโลก (เช่น myFoo.some.sub.property
-> myFoo$some$sub$property
) เพื่อให้เหตุผลเกี่ยวกับพวกเขาง่ายขึ้นสำหรับการตรวจจับรหัสที่ไม่ได้ใช้
มันพยายามที่จะถอยออกจากการทำสิ่งนี้หรือหยุดด้วยข้อผิดพลาดเมื่อทำมันจะสร้างเอาต์พุต JS ที่เสีย แต่มีกรณีที่มันจะล้มเหลวในการรับรู้ปัญหาและเพียงแค่สร้าง JS ที่หักโดยไม่มีการเตือนล่วงหน้า สิ่งนี้มีแนวโน้มที่จะเกิดขึ้นในรหัสที่ไม่ได้เขียนอย่างชัดเจนโดยคำนึงถึงคอมไพเลอร์ปิด
คอมไพเลอร์ปิดและภายนอกที่ใช้โดยค่าเริ่มต้นสมมติว่าสภาพแวดล้อมเป้าหมายเป็นหน้าต่างเว็บเบราว์เซอร์
นักเขียนเว็บได้รับการสนับสนุนด้วยเช่นกัน แต่คอมไพเลอร์อาจไม่สามารถเตือนคุณได้หากคุณพยายามใช้คุณสมบัติที่ไม่สามารถใช้งานได้จริงสำหรับนักเขียนเว็บ
มีการเพิ่มไฟล์และฟีเจอร์ภายนอกบางไฟล์ลงในคอมไพเลอร์ปิดเพื่อรองรับสภาพแวดล้อม NodeJS แต่พวกเขาไม่ได้รับการสนับสนุนอย่างแข็งขันและไม่เคยทำงานได้ดีนัก
JavaScript ที่ไม่ได้ใช้ goog.module()
และ goog.require()
จาก base.js
เพื่อประกาศและใช้โมดูลไม่ได้รับการสนับสนุนอย่างดี
ECMASCRIPT import
และ export
ไวยากรณ์ไม่มีอยู่จนถึงปี 2015 คอมไพเลอร์ปิดและ closure-library
ได้พัฒนาวิธีการของตนเองสำหรับการประกาศและใช้โมดูลและสิ่งนี้ยังคงเป็นวิธีการที่ได้รับการสนับสนุนอย่างดีเพียงวิธีเดียวในการกำหนดโมดูล
คอมไพเลอร์ใช้ความเข้าใจเกี่ยวกับโมดูล ECMAScript แต่การเปลี่ยนโครงการของ Google เพื่อใช้ไวยากรณ์ที่ใหม่กว่าไม่เคยให้ประโยชน์ที่คุ้มค่ากับค่าใช้จ่ายในการเปลี่ยนแปลง รหัส TypeScript ของ Google ใช้โมดูล ECMASCRIPT แต่จะถูกแปลงเป็น goog.module()
ไวยากรณ์ก่อนที่จะปิดคอมไพเลอร์จะเห็นพวกเขา ดังนั้นการสนับสนุนโมดูล ECMASCRIPT อย่างมีประสิทธิภาพไม่ได้ใช้ใน Google ซึ่งหมายความว่าเราไม่น่าจะสังเกตเห็นหรือแก้ไขข้อบกพร่องในการสนับสนุนโมดูล ecmascript
การสนับสนุนโมดูล CommonJS ตามที่เพิ่มเข้ามาในอดีต แต่ไม่ได้ใช้ภายใน Google และมีแนวโน้มที่จะถูกลบออกทั้งหมดในปี 2567
คอมไพเลอร์ปิดใช้งานโดย Google Project เพื่อ:
ลดขนาดรหัสอย่างมากของแอปพลิเคชัน JavaScript ที่มีขนาดใหญ่มาก
ตรวจสอบรหัส JS สำหรับข้อผิดพลาดและเพื่อให้สอดคล้องกับแนวทางปฏิบัติที่ดีที่สุดทั่วไปและ/หรือโครงการเฉพาะโครงการ
กำหนดข้อความที่มองเห็นได้ผู้ใช้ในลักษณะที่ทำให้สามารถแทนที่ด้วยเวอร์ชันที่แปลเพื่อสร้างแอปพลิเคชันเวอร์ชันที่แปลได้
TransPile คุณสมบัติ JS ใหม่กว่าในรูปแบบที่จะทำงานบนเบราว์เซอร์ที่ขาดการสนับสนุนสำหรับคุณสมบัติเหล่านั้น
แบ่งแอปพลิเคชันเอาต์พุตออกเป็นชิ้นที่อาจโหลดเป็นรายบุคคลได้ตามต้องการ
หมายเหตุ: ชิ้นเหล่านี้เป็นสคริปต์จาวาสคริปต์ธรรมดา พวกเขาไม่ได้ใช้ ECMASCRIPT import
และ export
ไวยากรณ์
เพื่อให้บรรลุเป้าหมายเหล่านี้คอมไพเลอร์ปิดให้ข้อ จำกัด มากมายเกี่ยวกับการป้อนข้อมูล:
ใช้ goog.module()
และ goog.require()
เพื่อประกาศและใช้โมดูล
การสนับสนุนสำหรับ import
และ export
ไวยากรณ์ที่เพิ่มใน ES6 ไม่ได้รับการดูแลอย่างแข็งขัน
ใช้คำอธิบายประกอบในความคิดเห็นเพื่อประกาศข้อมูลประเภทและให้ข้อมูลที่คอมไพเลอร์จำเป็นต้องหลีกเลี่ยงการทำลายรูปแบบรหัสบางอย่าง (เช่น @nocollapse
และ @noinline
)
ใช้เฉพาะ dot-access (เช่น object.property
) หรือใช้การเข้าถึงแบบไดนามิกเท่านั้น (เช่น object[propertyName]
หรือ Object.keys(object)
) เพื่อเข้าถึงคุณสมบัติของประเภทวัตถุเฉพาะ
การผสมสิ่งเหล่านี้จะซ่อนการใช้คุณสมบัติบางอย่างจากคอมไพเลอร์ส่งผลให้รหัสเอาต์พุตแตกเมื่อเปลี่ยนคุณสมบัติ
โดยทั่วไปคอมไพเลอร์คาดว่าจะเห็นแอปพลิเคชันทั้งหมดเป็นการรวบรวมเดียว อินเทอร์เฟซจะต้องสร้างอย่างรอบคอบและชัดเจนเพื่อให้การทำงานร่วมกันกับรหัสนอกหน่วยรวบรวม
คอมไพเลอร์ถือว่ามันสามารถเห็นการใช้งานทั้งหมดของตัวแปรและคุณสมบัติทั้งหมดและจะเปลี่ยนชื่อพวกเขาได้อย่างอิสระหรือลบออกหากพวกเขาไม่ได้ใช้
ใช้ไฟล์ภายนอกเพื่อแจ้งคอมไพเลอร์ของตัวแปรหรือคุณสมบัติใด ๆ ที่ต้องไม่ลบหรือเปลี่ยนชื่อ
มีไฟล์ภายนอกเริ่มต้นที่ประกาศ API มาตรฐาน JS และ DOM Global API จำเป็นต้องใช้ไฟล์ภายนอกมากขึ้นหากคุณใช้ API ที่พบบ่อยน้อยกว่าหรือคาดว่าจะมีรหัส JavaScript ภายนอกเพื่อเข้าถึง API ในรหัสที่คุณกำลังรวบรวม
วิธีที่ง่ายที่สุดในการติดตั้งคอมไพเลอร์คือ NPM หรือเส้นด้าย:
yarn global add google-closure-compiler
# OR
npm i -g google-closure-compiler
ตัวจัดการแพ็คเกจจะเชื่อมโยงไบนารีให้คุณและคุณสามารถเข้าถึงคอมไพเลอร์ด้วย:
google-closure-compiler
สิ่งนี้เริ่มต้นคอมไพเลอร์ในโหมดอินเทอร์แอคทีฟ พิมพ์:
var x = 17 + 25 ;
กด Enter
จากนั้น Ctrl+Z
(บน Windows) หรือ Ctrl+D
(บน Mac/Linux) จากนั้น Enter
อีกครั้ง คอมไพเลอร์จะตอบกลับด้วยเอาต์พุตที่รวบรวม (โดยใช้โหมด SIMPLE
ตามค่าเริ่มต้น):
var x = 42 ;
นอกจากนี้ยังมีการเปิดตัวคอมไพเลอร์ไว้ล่วงหน้าผ่าน Maven
คอมไพเลอร์ปิดมีตัวเลือกมากมายสำหรับการอ่านอินพุตจากไฟล์การเขียนเอาต์พุตไปยังไฟล์ตรวจสอบรหัสของคุณและเรียกใช้การเพิ่มประสิทธิภาพ นี่คือตัวอย่างง่ายๆของการบีบอัดโปรแกรม JS:
google-closure-compiler --js file.js --js_output_file file.out.js
เราได้รับ ประโยชน์มากที่สุด จากคอมไพเลอร์หากเราให้ ซอร์สโค้ดทั้งหมดของเรา (ดูการรวบรวมหลายสคริปต์) ซึ่งช่วยให้เราสามารถใช้การปรับ ADVANCED
:
google-closure-compiler -O ADVANCED rollup.js --js_output_file rollup.min.js
หมายเหตุ: เอาต์พุตด้านล่างเป็นเพียงตัวอย่างและไม่ได้ทันสมัย หน้าธงและตัวเลือก Wiki ได้รับการอัปเดตในแต่ละรุ่น
หากต้องการดูตัวเลือกทั้งหมดของคอมไพเลอร์พิมพ์:
google-closure-compiler --help
--flag | คำอธิบาย |
---|---|
--compilation_level (-O) | ระบุระดับการรวบรวมที่จะใช้ ตัวเลือก: BUNDLE , WHITESPACE_ONLY , SIMPLE (ค่าเริ่มต้น), ADVANCED |
--env | กำหนดชุดของ builtin externs เพื่อโหลด ตัวเลือก: BROWSER CUSTOM ค่าเริ่มต้นเป็น BROWSER |
--externs | ไฟล์ที่มีจาวาสคริปต์ภายนอก คุณสามารถระบุหลาย |
--js | ชื่อไฟล์ JavaScript คุณสามารถระบุหลาย ชื่อธงเป็นตัวเลือกเนื่องจาก ARGs ถูกตีความว่าเป็นไฟล์ตามค่าเริ่มต้น คุณอาจใช้รูปแบบลูกโลกแบบน้อยที่สุด ตัวอย่างเช่นใช้ --js='**.js' --js='!**_test.js' เพื่อรวมไฟล์ JS ทั้งหมดที่ไม่สิ้นสุดใน _test.js |
--js_output_file | ชื่อไฟล์เอาต์พุตหลัก หากไม่ได้ระบุเอาต์พุตจะถูกเขียนไปยัง stdout |
--language_in | ตั้งค่าข้อมูลจำเพาะภาษาที่แหล่งอินพุตควรปฏิบัติตาม ตัวเลือก: ECMASCRIPT3 , ECMASCRIPT5 , ECMASCRIPT5_STRICT , ECMASCRIPT_2015 , ECMASCRIPT_2016 , ECMASCRIPT_2017 , ECMASCRIPT_2018 , STABLE ECMASCRIPT_2019 ECMASCRIPT_NEXT |
--language_out | ตั้งค่าข้อมูลจำเพาะภาษาที่เอาต์พุตควรสอดคล้อง ตัวเลือก: ECMASCRIPT3 , ECMASCRIPT5 , ECMASCRIPT5_STRICT , ECMASCRIPT_2015 , ECMASCRIPT_2016 , ECMASCRIPT_2017 , ECMASCRIPT_2018 , ECMASCRIPT_2019 , STABLE |
--warning_level (-W) | ระบุระดับการเตือนที่จะใช้ ตัวเลือก: QUIET , DEFAULT , VERBOSE |
คุณสามารถเข้าถึงคอมไพเลอร์ในโปรแกรม JS ได้โดยการนำเข้าคอม google-closure-compiler
:
import closureCompiler from 'google-closure-compiler' ;
const { compiler } = closureCompiler ;
new compiler ( {
js : 'file-one.js' ,
compilation_level : 'ADVANCED'
} ) ;
แพ็คเกจนี้จะให้การเข้าถึงโปรแกรม Graal Binary ดั้งเดิมในกรณีส่วนใหญ่และจะกลับไปที่เวอร์ชัน Java เป็นอย่างอื่น
หากคุณมีสคริปต์หลายรายการคุณควรรวบรวมพวกเขาทั้งหมดพร้อมกับคำสั่งคอมไพล์หนึ่งคำ
google-closure-compiler in1.js in2.js in3.js --js_output_file out.js
คุณยังสามารถใช้ลูกโลกสไตล์ขั้นต่ำ
# Recursively include all js files in subdirs
google-closure-compiler ' src/**.js ' --js_output_file out.js
# Recursively include all js files in subdirs, excluding test files.
# Use single-quotes, so that bash doesn't try to expand the '!'
google-closure-compiler ' src/**.js ' ' !**_test.js ' --js_output_file out.js
คอมไพเลอร์ปิดจะเชื่อมต่อไฟล์ตามลำดับที่ผ่านไปที่บรรทัดคำสั่ง
หากคุณใช้ Globs หรือไฟล์จำนวนมากคุณอาจเริ่มประสบปัญหาเกี่ยวกับการจัดการการพึ่งพาระหว่างสคริปต์ ในกรณีนี้คุณควรใช้ lib/base.js ที่รวมอยู่ซึ่งให้ฟังก์ชั่นสำหรับการบังคับใช้การพึ่งพาระหว่างสคริปต์ (คือ goog.module
และ goog.require
) คอมไพเลอร์ปิดจะสั่งซื้ออินพุตใหม่โดยอัตโนมัติ
คอมไพเลอร์ปิดจะเปิดตัวด้วย lib/base.js ที่ให้ฟังก์ชัน JavaScript และตัวแปรที่ทำหน้าที่เป็นดั้งเดิมที่เปิดใช้งานคุณสมบัติบางอย่างของคอมไพเลอร์ปิด ไฟล์นี้เป็นอนุพันธ์ของ base.js ที่มีชื่อเหมือนกันในไลบรารีการปิดที่เลิกใช้แล้วเร็ว ๆ นี้ base.js
นี้จะได้รับการสนับสนุนโดยคอมไพเลอร์ปิดไปข้างหน้าและอาจได้รับคุณสมบัติใหม่ มันถูกออกแบบมาเพื่อรักษาส่วนแกนกลางที่รับรู้เท่านั้น
ในการสร้างคอมไพเลอร์ด้วยตัวคุณเองคุณจะต้องมีสิ่งต่อไปนี้:
ข้อกำหนดเบื้องต้น | คำอธิบาย |
---|---|
Java 11 หรือใหม่กว่า | ใช้เพื่อรวบรวมซอร์สโค้ดของคอมไพเลอร์ |
nodejs | ใช้เพื่อสร้างทรัพยากรที่ใช้โดยการรวบรวม Java |
กระตวน | ใช้โดย Bazel เพื่อดาวน์โหลดการพึ่งพา |
บาเซลิสก์ | ใช้เพื่อสร้างเป้าหมายคอมไพเลอร์ต่างๆ |
Bazelisk เป็นเสื้อคลุมรอบ Bazel ที่โหลด Bazel เวอร์ชันที่เหมาะสมสำหรับที่เก็บที่กำหนด การใช้มันจะป้องกันข้อผิดพลาดปลอมที่เป็นผลมาจากการใช้ Bazel เวอร์ชันที่ไม่ถูกต้องเพื่อสร้างคอมไพเลอร์รวมถึงทำให้ใช้งาน Bazel รุ่นที่แตกต่างกันสำหรับโครงการอื่น ๆ ได้ง่าย
Bazelisk มีให้บริการผ่านผู้จัดการแพ็คเกจจำนวนมาก อย่าลังเลที่จะใช้สิ่งที่คุณพอใจที่สุด
คำแนะนำสำหรับการติดตั้ง Bazelisk
$ bazelisk build //:compiler_uberjar_deploy.jar
# OR to build everything
$ bazelisk build //:all
การทดสอบสามารถดำเนินการในลักษณะเดียวกัน คำสั่งต่อไปนี้จะเรียกใช้การทดสอบทั้งหมดใน repo
$ bazelisk test //:all
มีเป้าหมายการทดสอบหลายร้อยรายการดังนั้นจะใช้เวลาสองสามนาทีในการเรียกใช้ทั้งหมด ในขณะที่การพัฒนามักจะดีกว่าที่จะระบุการทดสอบที่แน่นอนที่คุณสนใจ
bazelisk test //: $path_to_test_file
ดูการบูรณาการ Bazel IDE
เมื่อคอมไพเลอร์ถูกสร้างขึ้นแล้วขวดที่รวบรวมจะอยู่ใน bazel-bin/
Directory คุณสามารถเข้าถึงได้ด้วยการโทรไปยัง java -jar ...
หรือโดยใช้ package.json script:
# java -jar bazel-bin/compiler_uberjar_deploy.jar [...args]
yarn compile [...args]
src/com/google/javascript/jscomp/CommandLineRunner.java
หรือสร้างคลาสขยายของคุณเองอย่างไรก็ตามคุณเลือกที่จะมีส่วนร่วมโปรดปฏิบัติตามจรรยาบรรณของเราเพื่อให้ชุมชนของเรามีสุขภาพที่ดีและเป็นมิตร
ลิขสิทธิ์ 2009 ผู้เขียนคอมไพเลอร์ปิด
ได้รับใบอนุญาตภายใต้ใบอนุญาต Apache เวอร์ชัน 2.0 ("ใบอนุญาต"); คุณไม่สามารถใช้ไฟล์นี้ยกเว้นตามใบอนุญาต คุณสามารถได้รับสำเนาใบอนุญาตที่ http://www.apache.org/licenses/license-2.0
เว้นแต่ว่ากฎหมายที่บังคับใช้หรือตกลงเป็นลายลักษณ์อักษรซอฟต์แวร์ที่แจกจ่ายภายใต้ใบอนุญาตจะถูกแจกจ่ายตาม "ตามพื้นฐาน" โดยไม่มีการรับประกันหรือเงื่อนไขใด ๆ ไม่ว่าจะโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและข้อ จำกัด ภายใต้ใบอนุญาต
เส้นทางรหัส | src/com/google/javascript/rhino , test/com/google/javascript/rhino |
url | https://developer.mozilla.org/en-us/docs/mozilla/projects/rhino |
รุ่น | 1.5R3 ด้วยการดัดแปลงอย่างหนัก |
ใบอนุญาต | ใบอนุญาตสาธารณะ NetScape และใบอนุญาตคู่ MPL / GPL |
คำอธิบาย | สำเนาของ Mozilla Rhino บางส่วน Mozilla Rhino เป็นการดำเนินการของ JavaScript สำหรับ JVM โครงสร้างข้อมูลต้นไม้ JavaScript Parse ถูกสกัดและแก้ไขอย่างมีนัยสำคัญสำหรับการใช้งานโดยคอมไพเลอร์ JavaScript ของ Google |
การดัดแปลงท้องถิ่น | แพ็คเกจได้รับการ renamespaced รหัสทั้งหมดที่ไม่เกี่ยวข้องกับแผนผัง Parse ถูกลบออก มีการเพิ่มตัวแยกวิเคราะห์ JSDOC และระบบการพิมพ์แบบคงที่ |
url | http://args4j.kohsuke.org/ |
รุ่น | 2.33 |
ใบอนุญาต | มิกซ์ |
คำอธิบาย | args4j เป็นไลบรารีคลาส Java ขนาดเล็กที่ทำให้ง่ายต่อการแยกวิเคราะห์ตัวเลือกบรรทัดคำสั่ง/อาร์กิวเมนต์ในแอปพลิเคชัน CUI ของคุณ |
การดัดแปลงท้องถิ่น | ไม่มี |
url | https://github.com/google/guava |
รุ่น | 31.0.1 |
ใบอนุญาต | ใบอนุญาต Apache 2.0 |
คำอธิบาย | ห้องสมุด Java หลักของ Google |
การดัดแปลงท้องถิ่น | ไม่มี |
url | https://github.com/findbugsproject/findbugs |
รุ่น | 3.0.1 |
ใบอนุญาต | ใบอนุญาต BSD |
คำอธิบาย | คำอธิบายประกอบสำหรับการตรวจจับข้อบกพร่องของซอฟต์แวร์ |
การดัดแปลงท้องถิ่น | ไม่มี |
url | http://junit.org/junit4/ |
รุ่น | 4.13 |
ใบอนุญาต | ใบอนุญาตสาธารณะทั่วไป 1.0 |
คำอธิบาย | กรอบสำหรับการเขียนและการทดสอบอัตโนมัติใน Java |
การดัดแปลงท้องถิ่น | ไม่มี |
url | https://github.com/google/protobuf |
รุ่น | 3.0.2 |
ใบอนุญาต | ใบอนุญาต BSD ใหม่ |
คำอธิบาย | สนับสนุนไลบรารีสำหรับบัฟเฟอร์โปรโตคอลการเข้ารหัสข้อมูลที่มีโครงสร้าง |
การดัดแปลงท้องถิ่น | ไม่มี |
url | https://github.com/google/re2j |
รุ่น | 1.3 |
ใบอนุญาต | ใบอนุญาต BSD ใหม่ |
คำอธิบาย | การจับคู่การแสดงออกปกติของเวลาเชิงเส้นใน Java |
การดัดแปลงท้องถิ่น | ไม่มี |
url | https://github.com/google/truth |
รุ่น | 1.1 |
ใบอนุญาต | ใบอนุญาต Apache 2.0 |
คำอธิบาย | กรอบการยืนยัน/ข้อเสนอสำหรับการทดสอบหน่วย Java |
การดัดแปลงท้องถิ่น | ไม่มี |
url | https://ant.apache.org/bindownload.cgi |
รุ่น | 1.10.11 |
ใบอนุญาต | ใบอนุญาต Apache 2.0 |
คำอธิบาย | Ant เป็นเครื่องมือสร้างที่ใช้ Java ในทางทฤษฎีมันเป็นเหมือน "ทำ" โดยไม่ต้องทำให้เกิดริ้วรอยและด้วยความสามารถในการพกพาของรหัส Java บริสุทธิ์ |
การดัดแปลงท้องถิ่น | ไม่มี |
url | https://github.com/google/gson |
รุ่น | 2.9.1 |
ใบอนุญาต | ใบอนุญาต Apache 2.0 |
คำอธิบาย | ห้องสมุด Java เพื่อแปลง JSON เป็นวัตถุ Java และในทางกลับกัน |
การดัดแปลงท้องถิ่น | ไม่มี |
เส้นทางรหัส | contrib/nodejs |
url | https://github.com/dcodeio/node.js-closure-compiler-externs |
รุ่น | E891B4FBCF5F466CC4307B0FA842A7D8163A073A |
ใบอนุญาต | ใบอนุญาต Apache 2.0 |
คำอธิบาย | พิมพ์สัญญาสำหรับ NodeJS APIs |
การดัดแปลงท้องถิ่น | การเปลี่ยนแปลงที่สำคัญเพื่อให้พวกเขาเข้ากันได้กับ NPMCommandlinerunner |