ดาวตก - Package.js
ในบทนี้เราจะเรียนรู้วิธีสร้างแพ็คเกจดาวตกของเราเอง
การสร้างแพ็คเกจ
มาเพิ่มโฟลเดอร์ใหม่บนเดสก์ท็อปที่จะสร้างแพ็คเกจ เราจะใช้หน้าต่างพร้อมรับคำสั่ง
C:\Users\username\Desktop\meteorApp> mkdir packages
ตอนนี้เราสามารถสร้างแพ็คเกจในโฟลเดอร์ที่เราสร้างไว้ด้านบน เรียกใช้คำสั่งต่อไปนี้จากพรอมต์คำสั่งUsername คือชื่อผู้ใช้ Meteor Developer และ package-name คือชื่อของแพ็คเกจ
C:\Users\username\Desktop\meteorApp\packages>meteor create --package username:package-name
การเพิ่มแพ็คเกจ
เพื่อให้สามารถเพิ่มแพ็กเกจในเครื่องลงในแอพของเราได้เราต้องตั้งค่าไฟล์ ENVIRONMENT VARIABLEซึ่งจะบอกให้ Meteor โหลดแพ็กเกจจากโฟลเดอร์ภายในเครื่อง คลิกขวาที่ไอคอนคอมพิวเตอร์แล้วเลือกproperties/Advanced system settings/Environment Variables/NEW.
Variable Name ควรจะเป็น PACKAGE_DIRS. Variable Valueควรเป็นเส้นทางไปยังโฟลเดอร์ที่เราสร้างขึ้น ในกรณีของเราC:\Users\username\Desktop\meteorApp\packages.
อย่าลืมรีสตาร์ทไฟล์ command prompt หลังจากเพิ่มตัวแปรสภาพแวดล้อมใหม่
ตอนนี้เราสามารถเพิ่มแพ็คเกจลงในแอพของเราได้แล้วโดยเรียกใช้โค้ดต่อไปนี้ -
C:\Users\username\Desktop\meteorApp>meteor add username:package-name
ไฟล์แพ็คเกจ
ไฟล์สี่ไฟล์ต่อไปนี้จะพบในแพ็คเกจที่เราสร้างขึ้น
- package-name-test.js
- package-name.js
- package.js
- README.md
แพ็คเกจการทดสอบ (package-name-test.js)
ข้อเสนอของ Meteor tinytestแพ็คเกจสำหรับการทดสอบ มาติดตั้งกันก่อนโดยใช้คำสั่งต่อไปนี้ในหน้าต่างพรอมต์คำสั่ง
C:\Users\username\Desktop\meteorApp>meteor add tinytest
ถ้าเราเปิด package-name-test.jsเราจะเห็นตัวอย่างการทดสอบเริ่มต้น เราจะใช้ตัวอย่างนี้เพื่อทดสอบแอป หมายเหตุ: การเขียนการทดสอบของเราเองจะดีกว่าเสมอเมื่อพัฒนาแพ็คเกจดาวตก
ในการทดสอบแพ็คเกจให้เรารันโค้ดนี้ในพรอมต์คำสั่ง
C:\Users\username\Desktop>meteor test-packages packages/package-name
เราจะได้ผลลัพธ์ดังต่อไปนี้
ไฟล์ package.js
นี่คือไฟล์ที่เราสามารถเขียนโค้ดได้ มาสร้างฟังก์ชันง่ายๆสำหรับแพ็คเกจของเรากัน แพ็คเกจของเราจะบันทึกข้อความบางส่วนในคอนโซล
package / package.js
myPackageFunction = function() {
console.log('This is simple package...');
}
ไฟล์ package-name.js
นี่คือไฟล์ที่เราสามารถกำหนดค่าแพ็คเกจบางอย่างได้ เราจะติดต่อกลับในภายหลัง แต่ตอนนี้เราจำเป็นต้องส่งออกmyPackageFunctionเพื่อให้เราสามารถใช้ในแอปของเรา เราจำเป็นต้องเพิ่มสิ่งนี้เข้าไปข้างในPackage.onUseฟังก์ชัน ไฟล์จะมีลักษณะดังนี้
package / package-name.js
Package.describe({
name: 'username:package-name',
version: '0.0.1',
// Brief, one-line summary of the package.
summary: '',
// URL to the Git repository containing the source code for this package.
git: '',
// By default, Meteor will default to using README.md for documentation.
// To avoid submitting documentation, set this field to null.
documentation: 'README.md'
});
Package.onUse(function(api) {
api.versionsFrom('1.2.1');
api.use('ecmascript');
api.addFiles('mypackage.js');
api.export('myPackageFunction'); // We are exporting the function we created above...
});
Package.onTest(function(api) {
api.use('ecmascript');
api.use('tinytest');
api.use('username:package-name');
api.addFiles('package-name-tests.js');
});
การใช้แพ็คเกจ
ในที่สุดเราก็สามารถเรียกไฟล์ myPackageFunction() จาก meteorApp.js ไฟล์.
package / package.js
if(Meteor.isClient) {
myPackageFunction();
}
คอนโซลจะบันทึกข้อความจากแพ็คเกจของเรา
เพื่อทำความเข้าใจให้ดีขึ้นว่าไฟล์ package.js ไฟล์สามารถกำหนดค่าได้เราจะใช้ตัวอย่างจากเอกสารอย่างเป็นทางการของ Meteor
นี่คือไฟล์ตัวอย่าง ...
/* Information about this package */
Package.describe({
// Short two-sentence summary.
summary: "What this does",
// Version number.
version: "1.0.0",
// Optional. Default is package directory name.
name: "username:package-name",
// Optional github URL to your source repository.
git: "https://github.com/something/something.git",
});
/* This defines your actual package */
Package.onUse(function (api) {
// If no version is specified for an 'api.use' dependency, use the
// one defined in Meteor 0.9.0.
api.versionsFrom('0.9.0');
// Use Underscore package, but only on the server.
// Version not specified, so it will be as of Meteor 0.9.0.
api.use('underscore', 'server');
// Use iron:router package, version 1.0.0 or newer.
api.use('iron:[email protected]');
// Give users of this package access to the Templating package.
api.imply('templating')
// Export the object 'Email' to packages or apps that use this package.
api.export('Email', 'server');
// Specify the source code for the package.
api.addFiles('email.js', 'server');
});
/* This defines the tests for the package */
Package.onTest(function (api) {
// Sets up a dependency on this package
api.use('username:package-name');
// Allows you to use the 'tinytest' framework
api.use('[email protected]');
// Specify the source code for the package tests
api.addFiles('email_tests.js', 'server');
});
/* This lets you use npm packages in your package*/
Npm.depends({
simplesmtp: "0.3.10",
"stream-buffers": "0.2.5"
});