這是這個JavaScript 系列的第七部分(作為整體的一部分),在這一部分中,我們將研究如何將我們的專案分解成小塊,以便它們易於管理。我們將創建某種關注點分離,使我們的專案有吸引力且易於導航。凡事都有美好的一面,當然也有醜陋的一面。所以,不要做得太過分。該做的時候就做。
如前所述,我們的重點是將專案的某些部分分解為單獨的文件,將其匯出,然後將其匯入到我們的「主應用程式」中。目前在 JavaScript 中有兩種方法可以做到這一點。使用 commonjs 方法以及 ES6 的模組化方法。他們都很棒,我們都會去看看。
不指定時預設使用commonjs匯入導出。這就是我們可以做的,const readline = require("readline");。 readline 是內建套件。我們可以在我們專案中編寫的第三方包或模組上使用這種方法。
讓我們從一個進行數學計算的專案開始。我們將創建加法和減法函數。就這兩個。
{ "name": "cmodule", "version": "1.0.0", "main": "index.js", "type": "commonjs", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "description": "" }
function add(x, y) { // return the sum of x and y }
module.exports = add;
const lib = require("./lib"); // we did, "./lib", "dot slash lib", because main.js and lib.js are in the same folder. console.log(lib(1, 2));
function sub(x, y) { // returns the difference x and y }
你應該自己實現這些功能嗎?
問題是,我們要如何匯出 sub?嘗試一下並在 main.js
中存取它知道,當我們這樣做時, module.exports = X ,X 被導出為整個模組,因此當我們 import const moduleName = require("moduleName"); 時,我們可以直接存取 X。所以我們無法使用相同的方法導出另一個值。
在這種情況下,我們可以透過將 add 和 sub 作為一個群組(物件)導出來匯出它們。
{ "name": "cmodule", "version": "1.0.0", "main": "index.js", "type": "commonjs", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "description": "" }
function add(x, y) { // return the sum of x and y }
lib 模組導出為一個對象,因此我們可以執行 moduleName.add 和 moduleName.sub。
我們也可以解構來導入, const { add, sub } = require("./lib");
module.exports = add;
const lib = require("./lib"); // we did, "./lib", "dot slash lib", because main.js and lib.js are in the same folder. console.log(lib(1, 2));
或
function sub(x, y) { // returns the difference x and y }
ES 模組樣式的匯入和匯出目前不是預設的,因此必須透過將 中的type 屬性設定為"module" 來明確指定package.json 文件。在這種情況下,我們可以從「readline」匯入readline;而不是 const readline = require("readline");。我們用 import 取代了 const,用 from 取代了 = 和 require。
我們將使用ES模組風格的導入和導出來建立一個類似的專案。我們將像之前一樣創建加法和減法函數。所以這次你可以複製並貼上它。
module.exports = { add, sub };
建立兩個文件,lib.js 和 main.js: touch lib.js main.js
在 lib.js
中實作新增的主體
{ "name": "cmodule", "version": "1.0.0", "main": "index.js", "type": "commonjs", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "description": "" }
function add(x, y) { // return the sum of x and y }
module.exports = add;
const lib = require("./lib"); // we did, "./lib", "dot slash lib", because main.js and lib.js are in the same folder. console.log(lib(1, 2));
function sub(x, y) { // returns the difference x and y }
module.exports = { add, sub };
const lib = require("./lib"); // lib is an object so we can do lib dot someThing console.log(lib.add(1, 2)); console.log(lib.sub(1, 2));
const { add, sub } = require("./lib"); console.log(add(1, 2)); console.log(sub(1, 2));
exports.add = function add(x, y) { // return the sum of x and y }; exports.sub = function sub(x, y) { // return the difference of x and y };
或
exports.add = function (x, y) { // return the sum of x and y }; exports.sub = function (x, y) { // return the difference of x and y };
{ "name": "emodule", "version": "1.0.0", "main": "index.js", "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "description": "" }
或
function add(x, y) { // return the sum of x and y }
使用commonjs或es模組導入導出風格是相對的。 commonjs 沒有配置,所以有人會問為什麼不直接使用它? module.exports = someObject 與匯出預設 someObject 相同。我們可以使用 const someObject = require("pathToModule"); 導入並從“pathToModule”導入 someObject;。我喜歡說,無論你選哪一個都可以。您可以在同一文件中進行模組/預設導出以及單獨導出。
這些是我在開發後端專案時嘗試遵守的一些規則:
你能猜到接下來會發生什麼事嗎?好吧,我們開始做一些後端魔術。我們將開始後端開發。
如果它對您提出挑戰,請使用多個檔案重寫 mastermind 程式。在談論這個話題時,我會向你挑戰。完成這個項目。要么重寫它以使其工作,要么盡一切努力使其工作並應用今天的課程。
{ "name": "cmodule", "version": "1.0.0", "main": "index.js", "type": "commonjs", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "description": "" }
以上是JavaScript 基礎:第 7 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!