• node的require


    node的require

    这里是谈js的require
    require('xxx')
    一开始是没有缓存的,第一次require('xxx')会将函数执行然后将模块(路径)缓存。
    如果xxx中有 未声明的变量直接赋值 这相当于在浏览器中这么做。
    结果是 该未声明的变量成为了顶级对象的属性(global对象,在浏览器中则是window对象)

    如果用到了严格模式"use strict"(严格模式需要在函数内最开头声明,也就是文件xxx的最顶端)
    可以用Function("r", "regeneratorRuntime = r")(runtime);来规避

    如 npm的regenerator-runtime

    "use strict"
    /**
     * Copyright (c) 2014-present, Facebook, Inc.
     *
     * This source code is licensed under the MIT license found in the
     * LICENSE file in the root directory of this source tree.
     */
    
    var runtime = (function (exports) {
        /* ... */
    }(
      // If this script is executing as a CommonJS module, use module.exports
      // as the regeneratorRuntime namespace. Otherwise create a new empty
      // object. Either way, the resulting object will be used to initialize
      // the regeneratorRuntime variable at the top of this file.
      typeof module === "object" ? module.exports : {}
    ));
    
    try {
      regeneratorRuntime = runtime;
    } catch (accidentalStrictMode) {
      console.log(accidentalStrictMode)
      // This module should not be running in strict mode, so the above
      // assignment should always work unless something is misconfigured. Just
      // in case runtime.js accidentally runs in strict mode, we can escape
      // strict mode using a global Function call. This could conceivably fail
      // if a Content Security Policy forbids using Function, but in that case
      // the proper solution is to fix the accidental strict mode problem. If
      // you've misconfigured your bundler to force strict mode and applied a
      // CSP to forbid Function, and you're not willing to fix either of those
      // problems, please detail your unique predicament in a GitHub issue.
      Function("r", "regeneratorRuntime = r")(runtime);
    }
    

    参考

    1. 深入理解node中require的原理及执行过程
  • 相关阅读:
    线性回归 r python 比较
    vps
    插桩 inline hook 动态二进制插桩的原理和基本实现过程
    duration of lease 1 0.5 0.875 DHCP 租借时间 续租时间 重新绑定时间
    单页应用 cookies处理
    websocket 无需通过轮询服务器的方式以获得响应 同步在线用户数 上线下线 抓包 3-way-handshake web-linux-shell 开发
    code_action
    mysql 表级锁
    mysql 表级锁
    块级标签和行级标签
  • 原文地址:https://www.cnblogs.com/AFu-1993/p/12808072.html
Copyright © 2020-2023  润新知