webpack本地服务 import 引入js 不写.js 如何识别
我使用webpack-dev-server在本地起了服务运行项目
我在js文件中通过import引入其他js文件
import config from './config';
import system from './system';
但这这样会提示找不到文件 因为没有.js
如果加上.js就可以成功引入
import config from './config.js';
import system from './system.js';
我想实现vue react里那样 不用写.js 也可以引用js文件
请问大佬们这该如何配置
webpack配置
const path = require('path');
module.exports = {
resolve: {
extensions: ['.js', '...'],
},
devServer: {
openPage: 'html/webDome.html',
open: true,
},
mode:'development'
};
感谢各位大佬,问题已解决,原因是一开始的配置只是使用webpack起了一个服务,run dev时根本没有用webpack编译
以下是修改后的webpak配置:
// const path = require('path');
const path = require('path')
const CopyPlugin = require("copy-webpack-plugin");
const {CleanWebpackPlugin} = require('clean-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin');
const HtmlWebpackPluginConfig={
scriptLoading: 'blocking', // script 默认会带上defer
filename: 'webDemo.html', // 默认是index.html
template: './public/webDemo.html', // 如果觉得插件默认生成的hmtl5文件不合要求,可以指定一个模板,模板文件如果不存在,会报错,默认是在项目根目录下找模板文件,才模板为样板,将打包的js文件注入到body结尾处
inject:'head', // true|body|head|false,四种值,默认为true,true和body相同,是将js注入到body结束标签前,head将打包的js文件放在head结束前,false是不注入,这时得要手工在html中加js
}
module.exports = {
entry: './src/main', //main.js中的js可以省略,前面的./不能省
output:{
// filename:'./dist/[hash]app.js',
// hashDigestLength: 8,
filename:'build.js',
path: path.resolve(__dirname, 'dist'),
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin(HtmlWebpackPluginConfig),
new CopyPlugin({
patterns: [
{
from: path.join(__dirname, "public"),
to: path.join(__dirname, "dist"),
globOptions: {
dot: true,
gitignore: true,
ignore: ["**/webDemo.html"],
},
}
],
})
],
devServer: {
contentBase: path.join(__dirname, "public"),
port: 9000,
open:true,
index:'webDemo.html', // 与HtmlWebpackPlugin中配置filename一样
inline:true // 默认为true, 意思是,在打包时会注入一段代码到最后的js文件中,用来监视页面的改动而自动刷新页面,当为false时,网页自动刷新的模式是iframe,也就是将模板页放在一个frame中
},
mode: 'development'
}
文件目录:
main.js:import './config/config' // 可以不加.js
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
根据你提供的有限的信息,我试着还原一下你的项目结构.
根据
http://localhost:8080/js/config
可知项目下有个 js 文件夹,其中有个 config.js 文件.而你在 js 文件中通过import config from './config.js';
去导入 config,那说明这个文件跟 config.js 同级,暂定为 index.js.然后根据你的 Webpack 配置,可知还有个 html 文件夹,里面有个 webDemo.html 文件.所以猜测你项目的结构如下:而 html 文件大概是这样的
你的 Webpack 配置里面没有定义 entry,那 Webpack 默认会使用
src/index.js
作为 entry,基于以上猜测,那出现你所描述的问题,原因应该是如 @Meathill 描述的那样,你引用的 js 根本没有经过 Webpack 打包,而是通过浏览器原生支持的
ES Module
来实现的,所以你在 Webpack 中去配置extensions
没有效果.使用 Webpack 打包
要解决这个问题,你可以选择去配置 Webpack,让 js 代码通过 Webpack 打包,Webpack 会帮你解决后缀名的问题,你就可以愉快的使用
import config from './config'
了.配置如下:
webpack.config.js
中添加了entry
配置webDemo.html
修改了 src 路径,改成经过 Webpack 打包后生成的文件,路径为这里的
/main.js
中的main
跟 Webpack 中entry
下的配置一一对应,Webpack 里面的生成文件的名字有很多地方可以自定义,有兴趣的话,可以翻阅文档了解.使用 ES Module Shims
使用ES Module Shims可以在浏览器原生的模块系统中实现类似 Webpack 中别名的功能,查看官方 GitHub 了解更多详情,示例如下:
使用 Vite
最后强烈推荐尝试一下 Vite,开箱即用,速度极快,自带热加载...
虽然我没有实际在生产环境中用过,不过平常写个 Demo 什么的用起来很爽,直接安装一下就能用.
安装
运行
然后打开
http://localhost:3000/html/webDemo.html
查看效果你这里很明显是浏览器报错,换言之,根本就不是 webpack 的问题。
我猜测是你没有配置好,所以 webpack 没有打包,走了 ESM 直接导出,于是浏览器去查找文件没找到。
建议先贴配置文件。
这个可能是导入的 js文件没有导出 ESM(模块),导致导入时不加后缀报错。
配置 webpack resolve extension
https://webpack.js.org/config...
entry 配置没配置