Require函数
Require函数: 用于引入模块、 JSON、或本地文件。 可以从 node_modules 引入模块。 可以使用相对路径(例如 ./、 ./foo、 ./bar/baz、 …/foo)引入本地模块或 JSON 文件,路径会根据 __dirname定义的目录名或当前工作目录进行处理
// 引入本地模块:
const myLocalModule = require('./path/myLocalModule');
// 引入 JSON 文件:
const jsonData = require('./path/filename.json');
// 引入 node_modules 模块或 Node.js 内置模块:
const crypto = require('crypto');
注 意 : \color{#FF0000} {注意:} 注意:
- Wepack本身是一个预编译路径,不能够require纯变量的打包工具,因为无法预知变量路径
- require(path) ,path 至少要有三部分组成, 目录,文件名和后缀
- 目录:webpack 才知道从哪里开始查找
- 后缀 文件后缀,必须要加上,不然会报错
- 文件名:可用变量表示
综上以下引用方式是错误的!
let imgUrlStr = '../images/a.png';
let imgUrl = require(imgUrlStr);
//webpack无法知道是哪个模块或图片被引入,故无法将图片hash并输出到指定dist文件下
鉴于require在纯变量的情况下找不到模块,所以我们至少要在require参数中写明一个目录(如下边代码中的example 2和example 3),这样的话,虽然不知道具体的模块,但是webpack也会为我们做些分析工作:
【如分析目录: ‘…/images’ 或着 提取正则表达式 ‘/^.*.png$/‘】
let imgName = 'a';
let imgAllName = 'a.png';
// example 1
let imgUrl = require('../images/a.png'); // 纯字符串
// example 2
let imgUrl = require('../images/' + imgAllName); // 目录 + 文件全名
// example 3
let imgUrl = require('../images/' + imgName + '.png'); // 目录 + 文件名 + 后缀
import与require区别
node编程中最重要的思想就是模块化,import和require都是被模块化所使用。
遵循规范
- equire 是 AMD规范引入方式
- import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法
调用时间
- require是运行时调用,所以require理论上可以运用在代码的任何地方
- import是编译时调用,所以必须放在文件开头
本质
- require是赋值过程,其实require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量
- import是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require
参考:
资料一:https://blog.csdn.net/liubangbo/article/details/105028135
资料二:https://www.cnblogs.com/sunshq/p/7922182.html