代码之家  ›  专栏  ›  技术社区  ›  Rodrigo

网页包:如何在页面加载时加载模块?

  •  0
  • Rodrigo  · 技术社区  · 8 年前

    使用webpack,我正在创建一个库扩展。问题是图书馆 从[某个服务器]

    扩展stats的主类包含:

    class MyExtension extends Autodesk.Viewing.Extension {
      // ...
    }
    

    <script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/6.*/viewer3D.min.js"></script>
    <script src="lib/extension.js"></script>
    

    问题是 Autodesk 常量不是npm模块,因此当包含两个JS文件时,会引发以下错误:

    Uncaught ReferenceError: Autodesk is not defined
    

    组织分解结构: 它在使用webpack dev build时可以工作,但不会与产品构建一起工作。

    当我在主页上加载JS文件时,它就工作了。当libs加载到AJAX请求中时,就会出现这个问题(特别是我在AJAX请求中使用lib) Bootstrap tab )

    包.json

    {
      "name": "extension",
      "version": "1.0.0",
      "description": "",
      "main": "src/index.js",
      "scripts": {
        "build": "WEBPACK_ENV=build webpack",
        "dev": "WEBPACK_ENV=dev webpack --progress --watch --log-level=debug"
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "@babel/cli": "^7.0.0",
        "@babel/core": "^7.0.0",
        "@babel/plugin-proposal-class-properties": "^7.0.0",
        "@babel/polyfill": "^7.0.0",
        "@babel/preset-env": "^7.0.0",
        "@babel/register": "^7.0.0",
        "babel": "^6.23.0",
        "babel-loader": "^8.0.0",
        "css-loader": "^1.0.0",
        "node-sass": "^4.9.3",
        "sass-loader": "^7.1.0",
        "style-loader": "^0.23.0",
        "webpack": "^4.17.1",
        "webpack-cli": "^3.1.0",
        "webpack-command": "^0.4.1",
        "webpack-dev-server": "^3.1.7"
      },
      "dependencies": {
        "lodash": "^4.17.10"
      }
    }
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   Eason Kang    8 年前

    viewer3d..min.js 已加载到您的网页中。否则 Autodesk 不会在中创建对象 window

    我认为在AJAX调用中还没有完全加载页面,您可以验证 欧特克 窗口 像这样 example 在选项卡内容页中:

    if( typeof window.Autodesk === 'undefined' ) {
        $.getScript( '<external JS>' );
    }
    

    package.json 在这里,我不知道你如何实现你的应用程序,并作出上述假设。如果不正确,请考虑在没有机密部分的情况下分享更多细节,或发送一个非机密可复制的案例给 forge.help [at] autodesk.com

        2
  •  0
  •   ChrisR    8 年前

    在你的 webpack.config.js ,配置 UglifyJsPlugin 这样地:

    plugins: [
      new UglifyJsPlugin({
        uglifyOptions: {
          mangle: {
            keep_classnames: true
          }
        }
      })
    ]
    

    这将告诉Webpack中的UglifyJsPlugin避免更改类名,这样您就可以引用 Autodesk