这本文章没有任何技术含量,纯粹就是解决单页引入第三发库的问题而写的,如果要理解深刻查看模块加载器祥光资料

@(es5)

一、静态引入

1. html标签script引入

2. esm 中import ModuleName from 'module/path'

3. commonjs 中 const ModuleName = reuquire(module/path)

4. AMD

年代久远,价值在于jquery源码采用模块是AMD,你要学习jquery设计模式,必先学习AMD

require(['module1/path'], function (module1) {
module.someMethod()
})

5. CMD

完全忘记是什么,现在就只知道到它一个特点,就近依赖(类似动态加载)

6. webpack .externals

构建引入(其他构建工具暂不清楚),这个根据webapck版本设置,因为webpack每个版本都有调整,参考地址 https://www.webpackjs.com/configuration/externals/#externals

二、动态引入

1. import()

https://www.webpackjs.com/guides/lazy-loading/

import('module1/path').then(res => {
// todo
// 如果是esm,res.default 是引入模块地址
// 如果是commonjs, res 是引用模块地址
}) // 打包成chunk 模块
import(/*webpackChunkName Module1 */, 'module1/path').then((res) => {
// todo
})

2. require.ensure() (已经不推荐使用了)

注意:这不是commonjs规范,这是 webpack中module 知识点

require.ensure(dependencies: String[], callback: function(require), errorCallback: function(error), chunkName: String)

示例:

const modulePathObj = {
module1: 'module1/path'
}
const modulePathAry = Object.keys(modulePathObj).map(item => modulePathObj[item])
require.ensure(modulePathAry, function(require) {
const module1 = require(modulePathObj.module1)
})

阮一峰 commonjs require基础参考

3. DOM节点scriptonload事件

export const LoadScript = (url) => {
return new Promise((resolve, reject) => {
try {
const script = document.createElment('script')
script.onload = () => {
resolve()
}
script.src = url
document.querySelect('head').appendChild(script)
} cathc (err) {
reject(err)
}
})
}

4. jsonp

通常听到是解决跨域(但在现在跨域的解决方案基本上是nginx)。jsonp的机制不就是返回js的callBack

百度地图在es6中就是这么引入(我目前就遇到这个)

export const loadBMap = function () {
const AK = '百度ak值'
const url = 'https://api.map.baidu.com/api?v=2.0&ak=' + AK + '&s=1&callback=onBMapCallback'
return new Promise((resolve, reject) => {
// 如果已加载直接返回
if (typeof BMap !== 'undefined') return resolve(BMap)
// 百度地图异步加载回调处理
window.onBMapCallback = function () { resolve(BMap) }
// 插入script脚本
let scriptNode = document.createElement('script')
scriptNode.setAttribute('type', 'text/javascript')
scriptNode.setAttribute('src', url)
document.body.appendChild(scriptNode)
})
}
}

问题:es6 引入百度地图,引入某个api的类,可以ak的值不存在问题的(也就是,jsopn的对应的参数不存在)?

解决方案:在入口文件添加一个 script 标签,如下:

<script src="https://api.map.baidu.com/api?v=2.0&ak=百度ak值"><script>

不用担心 BMap 引入问题,因为BMap 是全变量,只需 loadBMap 中判断 BMap 是否存在,如果存在就不执行loadScript

总结

js引入不成功,上面是10种方式中肯定有一种能解决的,我目前是没有遇到不成功的,就算是seajs,无非define第三方库模块方式。

javascript 的引入的更多相关文章

  1. JavaScript 基础(一) - JavaScript的引入方式,JavaScript 变量命名规则,JS 的五种基本数据类型,ECMAScript 算数运算符,逻辑运算符

    JavaScript的引入方式 直接编写 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  2. web前端(13)—— 了解JavaScript,JavaScript的引入方式

    从本篇博文开始,将进入web前端方便最关键最重要的部分——javascript,学到后面你就知道它真的太重要了 什么是JavaScript JavaScript一种直译式的脚本语言,是一种动态类型.弱 ...

  3. JavaScript文件引入方式区别

    1.JavaScript文件引入方式 (1)正常引入 <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js&quo ...

  4. 【JavaScript的引入方式】

    javascript:   是基于对象和事件驱动的客户端脚本[组成] Bom:浏览对象模型(与浏览器交互的方法和接口) Dom:文档对象模型(处理网页内容的方法和接口) ecma:核心(描述了js的语 ...

  5. 27 JavaScript的引入&注释&弹窗&变量常量&数据类型及转换&内存&垃圾回收

    JS的引入: 1 内部引入 绑定元素事件如onclick="" 绑定锚点如href="JavaScript:void(0)" script标签引入,注意:如果标 ...

  6. JavaScript js 引入CDN 不生效 注意事项

    [博客园cnblogs笔者m-yb原创,转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]https ...

  7. React Native:使用 JavaScript 构建原生应用

    [转载] 本篇为联合翻译,译者:寸志,范洪春,kmokidd,姜天意 数月前,Facebook 对外宣布了正在开发的 React Native 框架,这个框架允许你使用 JavaScript 开发原生 ...

  8. 前端之JavaScript基础

    前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...

  9. web前端教程之javascript创建对象的方法

    今天给大家讲讲javascript基础教程中的javascript面向对象的技术,这一次我们深入的学习一下JavaScrip基于t面向对象之创建对象,关于面向对象的一些术语这里就不给大家介绍了,不了解 ...

随机推荐

  1. 【原创】运维基础之yum离线环境安装软件

    首先查看系统版本号,然后根据版本号从 CentOS-7-x86_64-DVD-1708.iso 和 CentOS-7-x86_64-Everything-1708.iso 根据需要选择一个下载,我这里 ...

  2. SSH和SSM对比总结

    当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力.MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...

  3. 第四章:Oracle12c 数据库在linux环境安装

    一:搭建yum 仓库 对于新手可以参考此文:<Vmware Workstation _linux yum 仓库搭建>.<CentOS7.2 创建本地YUM源和局域网YUM源> ...

  4. linux SWAP

    1.内存和SWAP之间合理的分配方案 M = Amount of RAM in GB, and S = Amount of swap in GB, then If M < 2, S = M *2 ...

  5. 库数据有则修改,无则新增sql

    方法一:insert中on duplicate key update的使用 例如: <insert id="bindPlaceInfo"> insert into gr ...

  6. process.argv

    返回进程启动时的命令行参数. 第一个元素是 process.execPath. 使用 process.argv0 可以获取 argv[0] 原始的值. 第二个元素是当前执行的 JavaScript 文 ...

  7. kubernetes核心概念

    摘抄自:  https://www.cnblogs.com/zhenyuyaodidiao/p/6500720.html 1.基础架构 1.1 Master Master节点上面主要由四个模块组成:A ...

  8. pycharm中连接公网IP方法

    我们的公网IP可以加到pycharm里面,这样程序跑的时候,在测试过程中就用pycharm直接修改文件,然后在pycharm里面上传,操作更加便捷 在pycharm中找到tool按钮,在菜单栏里面 然 ...

  9. Pytorch学习(一)基础语法篇

    how to use pytorch 1.Tensor we can create a tensor just like creating a matrix the default type of a ...

  10. react学习一篇就够了

    webstrom自动格式化代码 命令 js框架 MVC 安装 npm install create-react-app -g 生成项目(项目名npm发包包命名规范 /^[a-z0-9_-]$/) cr ...