如何从下一个js的节点模块外部的文件夹中导入模块

那就对了

我一直在努力从three.js导入示例模块在我的项目中使用了next.js(服务器端React框架)以及快速自定义服务器。我的服务器代码看起来像这样-

const express = require('express');
const next = require('next');

const favicon = require('serve-favicon');
var path = require('path');
let fs = require('fs')

const dev = process.env.NODE_ENV !== 'production';
const nextApp = next({ dev });

nextApp.prepare()
    .then(() => {

        let server = express(), options = {}, PORT = 3000, app = express()

        if (dev) {
            // DEVELOPMENT ///

            // DEVELOPMENT ///  
        }
        else {
            // PRODUCTION ///

            options = {
                ...options
            }
            // PRODUCTION ///
        }

        server.use(favicon(path.join(__dirname, "/favicon.ico")))


        server.get('/', (req, res) => {
            const actualPage = '/';
            nextApp.render(req, res, actualPage);
        });

        server.get('*', (req, res) => {
            const actualPage = '/not-found';

            nextApp.render(req, res, actualPage);
            // return handle(req, res)
        });


        server.listen((PORT), (err) => {
            if (err) throw err
            console.log('>> Ready on ' + PORT)
        })

    })

    .catch((ex) => {
        console.error(ex.stack)
        process.exit(1)
    })

我基本上运行了一个npx create-next-app并在next.js项目中配置了一个自定义快递服务器以进行动态路由,如您在上面的代码中看到的那样。

然后,我使用three.js在home组件中创建了一个场景,该场景被导入并渲染到App.js文件中。我的home.js组件看起来像这样-

import React, { useState, useEffect } from 'react'
import * as THREE from 'three'
import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls'

import "../src/assets/sass/home.scss"

const X = () => {

let parent, renderer, scene, camera, TrackballControls

useEffect(() => {

    // renderer
    renderer = new THREE.WebGLRenderer()
    renderer.setSize( window.innerWidth, window.innerHeight )
    document.body.appendChild( renderer.domElement )

    // scene
    scene = new THREE.Scene()

    // camera
    camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 100 )
    camera.position.set( 20, 20, 20 )

    // controls
    controls = new TrackballControls( camera )
    controls.minDistance = 5
    controls.maxDistance = 250
    controls.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled
    controls.dampingFactor = 0.05;

    // axes
    // scene.add(new THREE.AxisHelper( 20 ))

    // geometry
    let geometry = new THREE.SphereGeometry( 2, 8, 6, 0, 6.3, 0, 3.1)

    // material
    let material = new THREE.MeshBasicMaterial({
        wireframe: true,
        wireframeLinewidth: 1
    })

    let sphere = new THREE.Mesh( geometry, material )

    // parent
    parent = new THREE.Object3D()
    scene.add( parent )
    scene.add( sphere )

    function animate() {
        requestAnimationFrame( animate )
        parent.rotation.z += 0.01
        controls.update()
        renderer.render( scene, camera )
    }

    animate()
}

,[])

return <div></div>
}

export default X

现在这是我面临的问题-我正在从three.js导入一个名为TrackballControls的示例模块,该模块不完全位于核心三个模块内部,而是位于其外部的文件夹中,您可以从路径中看到它-'three / examples /jsm/controls/TrackballControls.js'您可以在此处看到更多信息-分别导入es6模块但是不知何故,它不起作用。它抛出像

这个

我尝试使用一个简单的create-react-app做同样的事情,导入完全有效!因此,我知道服务器端代码存在问题,并且我假设这是与Webpack相关的问题。但是我对webpack真的不了解。有人请帮助我,将不胜感激!

如果有帮助,这是我的next.config.js文件-

const withSASS = require('@zeit/next-sass')

const { parsed: localEnv } = require('dotenv').config()
const webpack = require('webpack')
// const path = require('path')

function HACK_removeMinimizeOptionFromCssLoaders(config) {
  console.warn(
    'HACK: Removing `minimize` option from `css-loader` entries in Webpack config',
  )
  config.module.rules.forEach(rule => {
      if (Array.isArray(rule.use)) {
          rule.use.forEach(u => {
      if (u.loader === 'css-loader' && u.options) {
          delete u.options.minimize
    }
  })
}
})
}

module.exports = withSASS(
  {
      webpack(config) {
        HACK_removeMinimizeOptionFromCssLoaders(config)
        config.plugins.push(new webpack.EnvironmentPlugin(localEnv))

        return config
  }
  })
那就对了

我知道这里没有人可以看到,但是如果将来有人遇到这个问题,我会发布我的解决方案。所以这就是我的想法-

我的问题中没有提到我正在使用称为next.js的SSR(服务器端渲染)反应框架。使用纯React应用程序,导入可以完美运行。但是在服务器端框架中,应在useEffect(或componentDidMount)内部以及与threejs其余部分一起完成与导入相关的工作。所以我像这样动态导入了它-

let dynamicallyImportPackage = async () => {
let TrackballControls

await import('three/examples/jsm/controls/TrackballControls')
// you can now use the package in here
.then(module => {
    TrackballControls = module.TrackballControls
})
.catch(e => console.log(e))

return TrackballControls
}

然后,我像这样在useEffect中使用了它-

let TrackbackControls = await dynamicallyImportPackage()

// controls
controls = new TrackbackControls(camera, container)
controls.minDistance = 5
controls.maxDistance = 250

Arigato Gosaimasu!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用webpack复制下一个js“公共”文件夹的行为?

来自分类Dev

如何在模块中导入lib文件夹

来自分类Dev

更改“下一个导出”的文件夹

来自分类Dev

从子文件夹导入主文件(不是另一个模块)

来自分类Dev

Maven:从另一个模块导入目标文件夹

来自分类Dev

Python 3 模块从另一个文件夹导入错误

来自分类Dev

导入一个模块在Python包中上下一个目录

来自分类Dev

我应该如何在模块中导入另一个python文件

来自分类Dev

如何从文件夹导入模块

来自分类Dev

如何在PHP的文件夹中显示下一个和上一个导航?

来自分类Dev

理念。在另一个模块中导入模块

来自分类Dev

如何使用webpack在npm软件包子文件夹中导入模块?

来自分类Dev

如何从Javascript的同一文件夹中的各种文件中导入一个功能?

来自分类Dev

如何配置requirejs路径以将多个模块指向一个文件夹?

来自分类Dev

将所有模块导入一个文件夹,并通过其属性之一使用它们

来自分类Dev

从 Phoenix 1.4 中的 priv/static/js 文件夹导入节点模块

来自分类Dev

从另一个本身导入不可用模块的文件中导入函数?

来自分类Dev

C#:正在读取文件夹中的下一个文件?

来自分类Dev

如何在d.ts文件中导入类型(从另一个文件)而不将其转换为模块?

来自分类Dev

Inno Setup:如何让Folder.CopyHere在移动到下一个文件夹之前完成复制?

来自分类Dev

要求文件夹作为模块在另一个文件夹作为模块内

来自分类Dev

如何在文件系统中导入外部模块?

来自分类Dev

node.js请求模块,如何使用步骤将请求的URL主体传递给下一个函数

来自分类Dev

希望在每次“下一个”单击时从文件夹中加载新图像

来自分类Dev

Excel vba 下一个发票编号,按月创建自动目录文件夹

来自分类Dev

下一个JS:模块解析失败:意外字符' '(1:0]

来自分类Dev

如果下一个子文件夹是指定的子文件夹(.htaccess),则从URL中删除该子文件夹。

来自分类Dev

如何从父文件夹的父目录导入模块?

来自分类Dev

如何从相邻文件夹中正确导入python模块?

Related 相关文章

  1. 1

    如何使用webpack复制下一个js“公共”文件夹的行为?

  2. 2

    如何在模块中导入lib文件夹

  3. 3

    更改“下一个导出”的文件夹

  4. 4

    从子文件夹导入主文件(不是另一个模块)

  5. 5

    Maven:从另一个模块导入目标文件夹

  6. 6

    Python 3 模块从另一个文件夹导入错误

  7. 7

    导入一个模块在Python包中上下一个目录

  8. 8

    我应该如何在模块中导入另一个python文件

  9. 9

    如何从文件夹导入模块

  10. 10

    如何在PHP的文件夹中显示下一个和上一个导航?

  11. 11

    理念。在另一个模块中导入模块

  12. 12

    如何使用webpack在npm软件包子文件夹中导入模块?

  13. 13

    如何从Javascript的同一文件夹中的各种文件中导入一个功能?

  14. 14

    如何配置requirejs路径以将多个模块指向一个文件夹?

  15. 15

    将所有模块导入一个文件夹,并通过其属性之一使用它们

  16. 16

    从 Phoenix 1.4 中的 priv/static/js 文件夹导入节点模块

  17. 17

    从另一个本身导入不可用模块的文件中导入函数?

  18. 18

    C#:正在读取文件夹中的下一个文件?

  19. 19

    如何在d.ts文件中导入类型(从另一个文件)而不将其转换为模块?

  20. 20

    Inno Setup:如何让Folder.CopyHere在移动到下一个文件夹之前完成复制?

  21. 21

    要求文件夹作为模块在另一个文件夹作为模块内

  22. 22

    如何在文件系统中导入外部模块?

  23. 23

    node.js请求模块,如何使用步骤将请求的URL主体传递给下一个函数

  24. 24

    希望在每次“下一个”单击时从文件夹中加载新图像

  25. 25

    Excel vba 下一个发票编号,按月创建自动目录文件夹

  26. 26

    下一个JS:模块解析失败:意外字符' '(1:0]

  27. 27

    如果下一个子文件夹是指定的子文件夹(.htaccess),则从URL中删除该子文件夹。

  28. 28

    如何从父文件夹的父目录导入模块?

  29. 29

    如何从相邻文件夹中正确导入python模块?

热门标签

归档