ดาวตก - 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"
});