这是这个 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中文网其他相关文章!