Skip to content

Commit e158b15

Browse files
committed
Add import vs. require examples
1 parent a0b88eb commit e158b15

File tree

6 files changed

+163
-0
lines changed

6 files changed

+163
-0
lines changed

import_vs_require/commonjs_module.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
console.log("commonjs_module");
2+
3+
exports.a = 5;

import_vs_require/difference1.mjs

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Difference #1
2+
// require is just a function, so you can pass any expression that
3+
// evaluates to a string (e.g. a function call, a template string)
4+
//
5+
// import can only be used with a string literal
6+
7+
// ===============================
8+
// ========== COMMONJS ==========
9+
// ===============================
10+
// Make sure file extension is .js, not .mjs
11+
// This works!
12+
13+
// const name = "commonjs_module";
14+
// const obj = require(`./${name}`);
15+
// console.log(`obj = ${JSON.stringify(obj)}`);
16+
17+
// =========================
18+
// ========== ESM ==========
19+
// =========================
20+
// Make sure file extension is .mjs, not .js
21+
// This does not work
22+
23+
import { func } from `./${name}`;

import_vs_require/difference2.mjs

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Difference #2
2+
// require is evaluated inline
3+
//
4+
// import is evaluated before the rest of the script
5+
6+
// ===============================
7+
// ========== COMMONJS ==========
8+
// ===============================
9+
// Make sure file extension is .js, not .mjs
10+
// ===== Expected output =====
11+
// $ node difference2
12+
// difference2
13+
// commonjs_module
14+
// obj = {"a":5}
15+
// ===========================
16+
17+
// console.log("difference2");
18+
19+
// const obj = require("./commonjs_module");
20+
// console.log(`obj = ${JSON.stringify(obj)}`);
21+
22+
// =========================
23+
// ========== ESM ==========
24+
// =========================
25+
// Make sure file extension is .mjs, not .js
26+
// ===== Expected output =====
27+
// $ node difference2.mjs
28+
// es_module
29+
// difference2
30+
// a = 5
31+
// ===========================
32+
console.log("difference2");
33+
34+
import { a } from "./es_module.mjs";
35+
console.log(`a = ${a}`);

import_vs_require/difference3.mjs

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Difference #3
2+
// require allows you to omit .js extensions
3+
//
4+
// import does not
5+
6+
// ===============================
7+
// ========== COMMONJS ==========
8+
// ===============================
9+
// Make sure file extension is .js, not .mjs
10+
// This works!
11+
12+
// const obj = require("./commonjs_module");
13+
// console.log(`obj = ${JSON.stringify(obj)}`);
14+
15+
// =========================
16+
// ========== ESM ==========
17+
// =========================
18+
// Make sure file extension is .mjs, not .js
19+
// This does not work. It won't work if es_module has a .js extension and
20+
// "type": "module" either.
21+
22+
import { a } from "./es_module";
23+
console.log(`a = ${a}`);

import_vs_require/es_module.mjs

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
console.log("es_module");
2+
3+
export const a = 5;

webpack_demo/dist/main_require.js

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
!(function (e) {
2+
var n = {};
3+
function t(r) {
4+
if (n[r]) return n[r].exports;
5+
var o = (n[r] = { i: r, l: !1, exports: {} });
6+
return e[r].call(o.exports, o, o.exports, t), (o.l = !0), o.exports;
7+
}
8+
(t.m = e),
9+
(t.c = n),
10+
(t.d = function (e, n, r) {
11+
t.o(e, n) || Object.defineProperty(e, n, { enumerable: !0, get: r });
12+
}),
13+
(t.r = function (e) {
14+
"undefined" != typeof Symbol &&
15+
Symbol.toStringTag &&
16+
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
17+
Object.defineProperty(e, "__esModule", { value: !0 });
18+
}),
19+
(t.t = function (e, n) {
20+
if ((1 & n && (e = t(e)), 8 & n)) return e;
21+
if (4 & n && "object" == typeof e && e && e.__esModule) return e;
22+
var r = Object.create(null);
23+
if (
24+
(t.r(r),
25+
Object.defineProperty(r, "default", { enumerable: !0, value: e }),
26+
2 & n && "string" != typeof e)
27+
)
28+
for (var o in e)
29+
t.d(
30+
r,
31+
o,
32+
function (n) {
33+
return e[n];
34+
}.bind(null, o)
35+
);
36+
return r;
37+
}),
38+
(t.n = function (e) {
39+
var n =
40+
e && e.__esModule
41+
? function () {
42+
return e.default;
43+
}
44+
: function () {
45+
return e;
46+
};
47+
return t.d(n, "a", n), n;
48+
}),
49+
(t.o = function (e, n) {
50+
return Object.prototype.hasOwnProperty.call(e, n);
51+
}),
52+
(t.p = ""),
53+
t((t.s = 0));
54+
})([
55+
function (e, n, t) {
56+
console.log("index");
57+
const { myEsModuleExportedFunction: r } = t(1);
58+
document.body.appendChild(
59+
(function () {
60+
const e = document.createElement("div");
61+
return (e.innerHTML = r()), e;
62+
})()
63+
);
64+
},
65+
function (e, n, t) {
66+
"use strict";
67+
function r() {
68+
return "elephant";
69+
}
70+
t.r(n),
71+
t.d(n, "myEsModuleExportedFunction", function () {
72+
return r;
73+
}),
74+
console.log("es_module");
75+
},
76+
]);

0 commit comments

Comments
 (0)