使用`import`语句使用webpack从typescript导入原始文件

2admgd59  于 2023-11-19  发布在  Webpack
关注(0)|答案(3)|浏览(198)

我需要使用webpack从typescript导入原始数据。这是我的设置:

  1. $ tree
  2. .
  3. +-- file.txt
  4. +-- main.ts
  5. +-- package.json
  6. +-- tsconfig.json
  7. +-- webpack.config.js

字符串

file.txt

  1. file-content

main.js

  1. import file from './file.txt';
  2. console.log(file);

package.json

  1. {
  2. "devDependencies": {
  3. "raw-loader": "^0.5.1",
  4. "ts-loader": "^3.1.1",
  5. "typescript": "^2.6.1",
  6. "webpack": "^3.8.1"
  7. }
  8. }

tsconfig.json文件系统

  1. {
  2. "compilerOptions": {
  3. "outDir": "./dist/",
  4. "sourceMap": true,
  5. "noImplicitAny": true,
  6. "module": "commonjs",
  7. "target": "es5",
  8. "baseUrl": "app"
  9. },
  10. "exclude": [
  11. "node_modules"
  12. ]
  13. }

webpack.config.js

  1. const path = require('path');
  2. const config = {
  3. entry: './main.ts',
  4. output: {
  5. path: path.resolve(__dirname, 'dist'),
  6. filename: 'app.js'
  7. },
  8. module: {
  9. rules: [
  10. { test: /\.txt$/, use: 'raw-loader' },
  11. { test: /\.tsx?$/, loader: 'ts-loader' },
  12. ]
  13. }
  14. };
  15. module.exports = config;


当我运行weback时,它说找不到模块:

  1. ERROR in ./main.ts
  2. [tsl] ERROR in /tmp/test/main.ts(1,18)
  3. TS2307: Cannot find module './file.txt'.


我的问题是:如何将txt数据导入到typescript文件中?这在编写angular组件时很有用,例如,导入html模板以将其分配给该组件的template属性。

qybjjes1

qybjjes11#

所以我终于让它工作了。我在.d.ts文件中添加了模块声明:

  1. declare module '*.txt' {
  2. const content: any;
  3. export default content;
  4. }

字符串
只有这样我才导入.txt文件:

  1. const someTextContent = require('./some.txt');


你可以在这里找到更多关于这一点。
编辑:
如果你想使用import关键字,只需如下所示:

  1. import * as someTextContent from './some.txt';

展开查看全部
jtoj6r0c

jtoj6r0c2#

我在src根目录下添加了一个全局定义文件global.d.ts,并添加了:

  1. declare module "*.txt" {
  2. const content: any;
  3. export default content;
  4. }

字符串
我不需要任何额外的tsconfig.json,我只需要raw-loader的标准webpack规则:

  1. rules: [
  2. {
  3. test: /\.txt$/i,
  4. loader: 'raw-loader',
  5. },


然后我可以导入一个名为./source.js.txt的纯文本文件到ts变量中,如下所示:

  1. import txt from './source.js.txt'


它似乎更像是让TS快乐而不是webpack。关键似乎是模块定义。如果需要,可以是全局的或每个文件的。

展开查看全部
dkqlctbz

dkqlctbz3#

在webpack v5之前,通常使用raw-loader将文件内容作为字符串导入。
现在你可以使用type: 'asset/source'导入文件的原始文本。

  1. module.exports = {
  2. module: {
  3. rules: [
  4. // ...
  5. {
  6. resourceQuery: /raw/,
  7. type: 'asset/source',
  8. },
  9. ],
  10. },
  11. }

字符串
如果使用Typescript,请在项目文件夹中创建声明文件(选择任意名称):

  1. //declarations.d.ts
  2. declare module '*?raw' {
  3. const content: string
  4. export default content
  5. }
  1. - import text from 'file.txt';
  2. + import text from 'file.txt?raw';

的数据
这样,无论文件扩展名是什么,您都可以将其作为原始文本导入,只需将?raw添加到导入地址即可
来源:https://webpack.js.org/guides/asset-modules/

展开查看全部

相关问题