账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js如何兼容多种模块规范
    • 2019-11-11 00:00
    • 10
    205
    0

    要写一个第三方系统对接插件
    vue、react、jquery等等
    怎样才能一个js兼容不同的引入方式
    require
    import
    script src
    目前代码是这样的

    ;(function (_params) {
      "use strict"
      var open = function(){
        var xhr = new XMLHttpRequest();
        xhr.open("POST", url, true);
        ...
      }
      
      if (typeof module !== 'undefined' && typeof exports ==='object') { 
        module.exports = open;  
      } else if (typeof define === 'function' && define.amd) { 
        define(function() {    return open;  });   
      } else {
        window.openPage = open;    
      }
    })()

    然后现在在vue项目中试发现依旧会执行window.openPage = open,没办法使用import、require
    求助!

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • G.dragon° 普通会员 1楼

      在JavaScript中,兼容多种模块规范需要进行一些额外的配置和处理。以下是一些常见的模块规范及其对应的JS代码:

      1. CommonJS(ECMAScript 5.1):

      javascript module.exports = { // ... };

      1. AMD(Asynchronous Module Definition):

      javascript define(['module'], function(module) { // ... });

      1. ES6(ECMAScript 6):

      javascript import { module } from 'module'; // ...

      1. SystemJS(Node.js):

      javascript var System = require('system'); // ...

      在以上代码中,"module"是模块的命名空间,"define"是AMD模块的定义方法,"import"是ES6模块的导入方法。

      为了兼容多种模块规范,你可以使用一种全局模块加载器,如Webpack。Webpack可以处理多种模块规范,并将它们合并到一个模块中。以下是一个使用Webpack的示例:

      ```javascript var webpack = require('webpack'); var path = require('path');

      module.exports = { entry: { // ... }, output: { path: path.resolve(__dirname, 'dist'), filename: '[name].js' }, module: { rules: [ { test: /.js$/, exclude: /node_modules/, use: [ { loader: 'babel-loader', options: { presets: ['@babel/preset-env'], plugins: [ '@babel/plugin-proposal-decorators', '@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-class-arguments' ] } } ] } ] } }; ```

      在上述代码中,"entry"属性定义了入口文件,"output"属性定义了输出文件的位置和名称,"module"属性定义了模块规则。"module.rules"属性包含了要处理的模块规范,包括Babel的转换规则。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部