标签: dynamic-import

从字符串动态导入文件中的方法

我有一个字符串,说:abc.def.ghi.jkl.myfile.mymethod.如何动态导入mymethod

我是这样做的:

def get_method_from_file(full_path):
    if len(full_path) == 1:
        return map(__import__,[full_path[0]])[0]
    return getattr(get_method_from_file(full_path[:-1]),full_path[-1])


if __name__=='__main__':
    print get_method_from_file('abc.def.ghi.jkl.myfile.mymethod'.split('.'))
Run Code Online (Sandbox Code Playgroud)

我想知道是否需要导入单个模块.

编辑:我使用的是Python 2.6.5版.

python import dynamic dynamic-import

68
推荐指数
6
解决办法
7万
查看次数

动态导入Python模块

我有一个可信的远程服务器,存储许多自定义Python模块.我可以通过HTTP(例如使用urllib2.urlopen)作为text/plain 获取它们,但是我无法将获取的模块代码保存到本地硬盘.如何将代码作为完全可操作的Python模块导入,包括其全局变量和导入?
我想我必须使用某些组合execimp模块的功能,但我还是无法让它工作.

python dynamic-import

27
推荐指数
2
解决办法
7525
查看次数

在 Node.js 上使用动态 import() 函数

我正在尝试在 Node v10 环境中实现动态导入的基本功能。

主文件

async function main() {
  try {
    const moduleA = await import('./moduleA');
    console.log('Inside main function...');
    moduleA();
    console.log(moduleA);
  }
  catch(err) {
    console.log(err);
  }
}

main();
Run Code Online (Sandbox Code Playgroud)

模块A.js

console.log('Inside global scope module A...');

function moduleA() {
  console.log('Running module A function...');
}

export default moduleA;
Run Code Online (Sandbox Code Playgroud)

这是我运行时得到的结果 npx babel-node main.js

PS C:\myProject\test-module-imports> npx babel-node src/main.js
Inside global scope module A...
Inside main function...
TypeError: moduleA is not a function
    at main (C:\myProject\test-module-imports\src/main.js:9:5)
    at process._tickCallback (internal/process/next_tick.js:68:7)
    at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)
    at …
Run Code Online (Sandbox Code Playgroud)

javascript dynamic-import node.js babeljs es6-modules

21
推荐指数
1
解决办法
2万
查看次数

React路由器与React 16.6 Suspense"无效的prop`组件`类型`object`提供给`Route`,期望`function`."

我正在使用React的最新版本(16.6)和react-router(4.3.1)并尝试使用代码分割React.Suspense.

虽然我的路由工作正常并且代码确实分裂成了几个动态加载的bundle,但我收到的警告是不返回一个函数,而是一个对象Route.我的代码:

import React, { lazy, Suspense } from 'react';
import { Switch, Route, withRouter } from 'react-router-dom';

import Loading from 'common/Loading';

const Prime = lazy(() => import('modules/Prime'));
const Demo = lazy(() => import('modules/Demo'));

const App = () => (
  <Suspense fallback={<Loading>Loading...</Loading>}>
    <Switch>
      <Route path="/" component={Prime} exact />
      <Route path="/demo" component={Demo} />
    </Switch>
  </Suspense>
);

export default withRouter(App);
Run Code Online (Sandbox Code Playgroud)

控制台警告如下: Warning: Failed prop type: Invalid prop `component` of type `object` supplied to `Route`, expected `function`. …

dynamic-import reactjs react-router react-router-v4 react-16

19
推荐指数
2
解决办法
8611
查看次数

Python - 创建一个运行代码的EXE,而不是编译时的代码

我正在制作一个设计为模块化的pygame程序.我正在使用main.py文件的pygame2exe构建一个exe,它基本上只是导入真正的主游戏并运行它.我希望的是一种将从EXE执行Python脚本的启动程序,而不是包含所有不可变文件的单个程序.

最好的方法是什么?我尝试使用imp在运行时动态导入所有模块而不是隐式导入它们,但这似乎打破了对象继承.

python executable pygame launcher dynamic-import

16
推荐指数
2
解决办法
1303
查看次数

将webpack块命名为react-loadable

我已经在我的项目中成功添加了可加载反应的库来启用代码分割,我发现的唯一问题是webpack生成的块没有命名,它们被赋予整数名称.

我的反应可加载代码是

const AppRootLoadable = Loadable({
  loader: () => import(/* webpackChunkName: "app" */ './App'),
  loading: () => null,
  render(loaded) {
    const Component = loaded.default;
    return <Component />;
  },
});
Run Code Online (Sandbox Code Playgroud)

我已添加评论告诉webpack 3我希望这个块被命名为app.我做错了什么吗?

dynamic-import reactjs webpack react-loadable

16
推荐指数
1
解决办法
4066
查看次数

webpack 动态加载外部模块失败

我正在尝试建立以下架构:一个核心 React 应用程序,它构建了一些基本功能,以及在运行时加载其他 React 组件的能力。这些额外的 React 组件可以按需加载,它们在构建核心应用程序时不可用(因此它们不能包含在核心应用程序的 bundle 中,必须单独构建)。经过一段时间的研究,我遇到了Webpack Externals,它看起来很合适。我现在使用以下 webpack.config.js 单独构建我的模块:

const path = require('path');
const fs = require('fs');

process.env.BABEL_ENV = 'production';
process.env.NODE_ENV = 'production';

const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);

module.exports = {
  entry: './src/MyModule.jsx',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'MyModule.js',
    library: 'MyModule',
    libraryTarget: 'umd'
  },
   externals: {
    "react": "react",
    "semantic-ui-react": "semantic-ui-react"
   },
   module: {
    rules: [
        {
            test: /\.(js|jsx|mjs)$/,
            include: resolveApp('src'),
            loader: require.resolve('babel-loader'),
            options: {              
              compact: true,
            },
        } …
Run Code Online (Sandbox Code Playgroud)

javascript module dynamic-import reactjs webpack

13
推荐指数
1
解决办法
9391
查看次数

如何防止打字稿将动态导入转换为 require()?

我正在构建一个discord.jsDiscord 机器人。现在由于某种原因,discord.js不适用于ESM模块(一个完全独立的问题),所以我的机器人应用程序使用CommonJS模块。现在我的系统上有另一个名为 的项目Lib,它有很多实用函数,我计划在几个不同的项目中使用这些函数,因此我不必重写它们。该Lib项目使用ESM模块。因为我不得不进口Lib来自DiscordBot,我用打字稿动态导入语法。现在,每当我转译我的DiscordBot项目时,动态导入都会被转换成一些丑陋的 javascript 模块代码,而那些丑陋的模块代码最终会使用 require()。由于 require() 无法导入 ESM 模块,我的机器人最终崩溃了。

然而,我试图停止我的 ts 编译器,从我导入的 ts 文件中复制代码,Lib然后将该代码手动粘贴到相应的 JS 文件中(并删除 TS 独有的功能,如类型注释和接口)。然后我运行了我的机器人应用程序,它运行得非常好。但我不想每次都这样做。所以这tsc是编译的问题。我该如何解决?

javascript dynamic-import node.js typescript tsc

13
推荐指数
3
解决办法
585
查看次数

在 Webpack 导出的库中使用动态导入

我正在通过 Webpack 将 React 组件导出为库。在该库中,我有几个React.lazy()执行动态导入的调用:

库.tsx:

import React from 'react';
const ComponentCheap = React.lazy(() => import('./ComponentCheap/index');
const ComponentExpensive = React.lazy(() => import('./ComponentExpensive/expensive');
export default function LibComponent(props) {
    return (<div>
        <Suspense fallback="Loading...">
            (props.useExpensive ? <ComponentExpensive /> : <ComponentCheap />)
        </Suspense>
    </div>)
}
Run Code Online (Sandbox Code Playgroud)

该库又被React.lazy()加载到消费应用程序中:

应用程序.tsx:

import React from 'react';
import ReactDOM from 'react-dom';
const LibComponent = React.lazy(() => import('@mystuff/library'));

ReactDOM.render((
    <Suspense fallback="Loading...">
        <LibComponent />
    </Suspense>
), document.body);
Run Code Online (Sandbox Code Playgroud)

问题是:当 webpack 生成库包时,它正确地分割ComponentCheapComponentExpensive单独的块,正确放置在库文件中,但生成代码来加载这些块,就好像它们位于应用程序的根目录上一样:

var ComponentCheap …
Run Code Online (Sandbox Code Playgroud)

dynamic-import webpack

11
推荐指数
0
解决办法
1075
查看次数

如何使用 Jest 测试动态导入(then 和 catch)

所以我一直在努力如何测试动态导入,在这种情况下,特别是在开玩笑,我在互联网上阅读了很多,但没有找到任何具体的东西,所以我考虑提出这个问题以集中一个体面的解决方案.

我在一个类中有以下方法

class MyClass {
   successMethod() {  ...  }

   errorMethod() { ... }

    myMethod() {
        return import('./myFile.js')
           .then(() => this.successMethod())
           .catch(() => this.errorMethod());
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

您如何使用 Jest 模拟此动态导入的 Success 和 Failing 承诺案例,以确保分别在解决或失败时调用每个方法(successMethoderrorMethod)?

我找到jest.doMock了模拟已解决案例的帮助,但没有找到通过模拟来使动态导入失败的方法,以便catch发现案例。

注意:这不是一个 React 应用程序,这是一个 Vanilla JS 项目。

javascript dynamic-import jestjs

9
推荐指数
1
解决办法
2906
查看次数