无法从 webpack 包访问定义的导出?
Can not access defined exports from the webpack bundle?
我正在尝试从现有的 js 文件组成一个 webpack 包,并在其他 JS 文件和偶尔在 html 脚本标记中使用导出。后来添加 babel 将整个东西转换为 es5,因此用 babel 和 ts 注释掉了部分,顺便说一句工作正常。
现在我在使用直接 webpack 导出时遇到问题。
webpack配置如下:
var path = require('path');
const { updateCommaList } = require('typescript');
module.exports = {
entry: {
'core' : [
'./src/utils.js',
'./src/zdlg.js'
]
},
devtool: 'source-map',
stats: 'verbose',
resolve: {
modules: ['node_modules']
},
resolveLoader: {
extensions: ['.ts', '.tsx'],
mainFields: ['loader', 'main']
},
output: {
filename: '[name].js',
library: "LIB",
libraryTarget: 'var',
path: path.resolve(__dirname, "dist")
},
module: {
}
};
我可以打包文件,没有错误。我正在使用导出语句导出函数,如下所示:
export function v ...
在 html 文件中我有
<script src="./core.js"></script>
<script type="module" src="./io.js"></script>
经过最近几天的修修补补,我发现了几件事。
- 如果我在核心对象的入口部分有一个文件,导出工作,因为 LIB 变量对每个导出函数都有 属性,我可以调用 LIB.v() 很好。
- 导入无论如何都不起作用,即
io.js 进口:
import {v} from './core.js';
加载页面时产生错误:Uncaught SyntaxError: import not found: v for the above.
- 将第二个文件添加到条目会导致 webpack 覆盖第一个文件的导出。我最初没有看到任何导出的原因是 zdlg.js 没有导出任何东西,并且 LIB 没有导出。如果 zdlg.js 导出任何函数,它们是唯一显示在 LIB 上的函数。
所以,最后,我可以从单个文件中导出函数,但我认为 webpack 的全部目的是允许从多个文件中组合模块。
我不确定我遗漏了什么或哪里出错了,应该是非常基本的东西...
如果这很重要,这里还有开发人员列表:
"devDependencies": {
"@babel/core": "^7.8.7",
"@babel/preset-env": "^7.8.7",
"babel-loader": "^8.0.6",
"install": "^0.13.0",
"npm": "^6.14.7",
"ts-loader": "^6.2.1",
"typescript": "^3.8.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.12",
"webpack-dev-middleware": "^3.7.2",
"webpack-dev-server": "^3.11.0",
"webpack-merge": "^5.0.9"
}
成功了,虽然不确定这是否是最好的方法。
基本上,我没有在导出的条目部分添加多个条目,而是创建了 index.js 文件,该文件从我需要的文件中重新导出所有导出:
require('./src/ut');
require('./src/zd');
export * from './src/ut';
export * from './src/zd'
条目现在只是index.js
entry: {
'core' : 'index.js'
},
按预期工作,但我不确定为什么 webpack 不能自动执行此操作,以及为什么我必须自己导出所有内容...
我正在尝试从现有的 js 文件组成一个 webpack 包,并在其他 JS 文件和偶尔在 html 脚本标记中使用导出。后来添加 babel 将整个东西转换为 es5,因此用 babel 和 ts 注释掉了部分,顺便说一句工作正常。 现在我在使用直接 webpack 导出时遇到问题。
webpack配置如下:
var path = require('path');
const { updateCommaList } = require('typescript');
module.exports = {
entry: {
'core' : [
'./src/utils.js',
'./src/zdlg.js'
]
},
devtool: 'source-map',
stats: 'verbose',
resolve: {
modules: ['node_modules']
},
resolveLoader: {
extensions: ['.ts', '.tsx'],
mainFields: ['loader', 'main']
},
output: {
filename: '[name].js',
library: "LIB",
libraryTarget: 'var',
path: path.resolve(__dirname, "dist")
},
module: {
}
};
我可以打包文件,没有错误。我正在使用导出语句导出函数,如下所示:
export function v ...
在 html 文件中我有
<script src="./core.js"></script>
<script type="module" src="./io.js"></script>
经过最近几天的修修补补,我发现了几件事。
- 如果我在核心对象的入口部分有一个文件,导出工作,因为 LIB 变量对每个导出函数都有 属性,我可以调用 LIB.v() 很好。
- 导入无论如何都不起作用,即 io.js 进口:
import {v} from './core.js';
加载页面时产生错误:Uncaught SyntaxError: import not found: v for the above.
- 将第二个文件添加到条目会导致 webpack 覆盖第一个文件的导出。我最初没有看到任何导出的原因是 zdlg.js 没有导出任何东西,并且 LIB 没有导出。如果 zdlg.js 导出任何函数,它们是唯一显示在 LIB 上的函数。
所以,最后,我可以从单个文件中导出函数,但我认为 webpack 的全部目的是允许从多个文件中组合模块。
我不确定我遗漏了什么或哪里出错了,应该是非常基本的东西...
如果这很重要,这里还有开发人员列表:
"devDependencies": {
"@babel/core": "^7.8.7",
"@babel/preset-env": "^7.8.7",
"babel-loader": "^8.0.6",
"install": "^0.13.0",
"npm": "^6.14.7",
"ts-loader": "^6.2.1",
"typescript": "^3.8.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.12",
"webpack-dev-middleware": "^3.7.2",
"webpack-dev-server": "^3.11.0",
"webpack-merge": "^5.0.9"
}
成功了,虽然不确定这是否是最好的方法。
基本上,我没有在导出的条目部分添加多个条目,而是创建了 index.js 文件,该文件从我需要的文件中重新导出所有导出:
require('./src/ut');
require('./src/zd');
export * from './src/ut';
export * from './src/zd'
条目现在只是index.js
entry: {
'core' : 'index.js'
},
按预期工作,但我不确定为什么 webpack 不能自动执行此操作,以及为什么我必须自己导出所有内容...